spring cloud 之二(服务注册与发现)
1、服务注册:在提供者工程上燕郊Eureka客户端依赖,自动将服务注册到Eureka注册中心服务列表。
- 添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency>
- 改造启动类,添加Eureka客户端发现注解 @EnableDiscoveryClient 开启Eureka客户端发现功能
- 修改配置文件application.yml,设置Eureka 注册中心地址
1 spring: 2 application: 3 name: springcloud-eureka-provider 4 server: 5 port: 8701 6 #设置该服务中心的hostname,指定ip,该实例名称不能重复 7 eureka: 8 client: 9 service-url: 10 defaultZone: http://localhost:8700/eureka
2、服务发现:在消费者工程上添加Eureka客户端依赖,可以使用根据服务名获取对应的服务列表。
- 添加依赖
1 <dependency> 2 <groupId>org.springframework.cloud</groupId> 3 <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> 4 </dependency> 5 6 <dependency> 7 <groupId>org.springframework.boot</groupId> 8 <artifactId>spring-boot-starter-web</artifactId> 9 </dependency>
- 改造启动类,添加Eureka客户端发现注解 @EnableDiscoveryClient 开启Eureka客户端发现功能
- 修改文件application.yml,设置Eureka服务地址
1 spring: 2 application: 3 name: springcloud-eureka-consumer 4 #设置该服务中心的hostname,指定ip,该实例名称不能重复 5 eureka: 6 client: 7 service-url: 8 defaultZone: http://localhost:8700/eureka 9 server: 10 port: 8702
- 修改消费者controller类使用工具类discoveryClient根据服务名获取对应的服务地址列表
1 @RestController 2 @RequestMapping("/consumer") 3 public class ConsumerController { 4 5 @Autowired 6 private DiscoveryClient discoveryClient; 7 8 @Autowired 9 private RestTemplate restTemplate; 10 11 @GetMapping("/{id}") 12 private DemoVo getDemo(@PathVariable int id) { 13 14 List<ServiceInstance> instances = discoveryClient.getInstances("springcloud-eureka-provider"); 15 ServiceInstance serviceInstance = instances.get(0); 16 String host = serviceInstance.getHost(); 17 int port = serviceInstance.getPort(); 18 String url = "http://" + host + ":" + port + "/provider/" + id; 19 return restTemplate.getForObject(url, DemoVo.class); 20 } 21 }
注意 spring boot 与spring cloud 版本适配问题。导致程序无法启动 文档见:https://spring.io/projects/spring-cloud#learn