服务注册与发现
Eureka
创建服务注册中心
- pom.xml
<parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Brixton.BUILD-SNAPSHOT</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka-server</artifactId> </dependency> </dependencies>
- 注解
通过
@EnableEurekaServer
注解启动一个服务注册中心提供给其他应用进行对话.
在DiscoveryMicroserviceApplication上添加此注解.- 配置
application.yml
(application.yml
配置可变参数)
在默认设置下,该服务注册中心也会将自己作为客户端来尝试注册它自己,所以我们需要禁用它的客户端注册行为,添加如下配置。
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
server: port: 8761 eureka: instance: hostname: discovery client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://discovery:${server.port}/eureka/ spring.cloud.config.discovery.enabled: true
配置
bootstrap.yml
(bootstrap.yml
配置工程不可变参数,且在启动时需要设定的内容)spring: application: name: discovery
启动
启动工程后,访问:
http://localhost:8761/
。可以看见Eureka的界面,其中还没有发现任何服务。创建服务提供方
pom.xml
<parent> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-parent</artifactId> <version>Brixton.BUILD-SNAPSHOT</version> <relativePath/> <!-- lookup parent from repository --> </parent> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-rest</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency>
UserController,实现
/add
请求处理接口@RestController public class UserController { private final Logger logger = Logger.getLogger(getClass()); @Autowired private DiscoveryClient client; @RequestMapping(value = "/add" ,method = RequestMethod.GET) public String add(@RequestParam String name) { ServiceInstance instance = client.getLocalServiceInstance(); logger.info("/add, host:" + instance.getHost() + ", service_id:" + instance.getServiceId()+",user add:"+name); return "user add success"; } }
注解
@EnableDiscoveryClient
注解,该注解能激活Eureka中的DiscoveryClient实现- 配置
通过
spring.application.name
属性,我们可以指定微服务的名称后续在调用的时候只需要使用该名称就可以进行服务的访问。
eureka.client.serviceUrl.defaultZone
属性对应服务注册中心的配置内容,指定服务注册中心的位置。bootstrap.yml
spring: application: name: user-service
application.yml
server: port: 9000 eureka: client: serviceUrl: defaultZone: http://localhost:8761/eureka/ instance: preferIpAddress: true
- 启动
访问刚才的Eureka地址
http://localhost:8761/
,可以看到服务USER-SERVICE
已经被注册了
访问http://localhost:user-service:9000/add?name=xu
,返回结果user add success