原创文章,转载请注明原文章地址,谢谢!
前面已经说到Eureka的服务注册,那在这里简单介绍一下Eureka的服务发现的过程。
首先要修改客户端提供者8001模块的ProviderUserController.java类。主要是添加了一个服务发现的方法,在注册中心管理的服务实例,而后通过这个实例名称,获取到相关信息。
@RestController
public class ProviderUserController {
@Autowired
private UserService userService;
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("/user/get/{id}")
public User get(@PathVariable("id") Long id) {
return userService.get(id);
}
@GetMapping("/user/list")
public List<User> list() {
return userService.list();
}
@GetMapping("/user/discovery")
public Object discovery() {
List<String> services = discoveryClient.getServices();
List<ServiceInstance> serviceInstances = discoveryClient.getInstances("CLOUD-USER");
for (ServiceInstance serviceInstance : serviceInstances) {
System.out.println(serviceInstance.getServiceId());
System.out.println(serviceInstance.getHost());
System.out.println(serviceInstance.getPort());
System.out.println(serviceInstance.getUri());
}
return this.discoveryClient;
}
}
接下来还要在主启动类上添加@EnableDiscoveryClient注解,表示开启服务发现的功能,该服务可以去注册中心获取到指定服务实例的信息。然后启动注册中心7001以及客户端8001,访问localhost:8001/user/discovery,观察结果。

再看一下控制台,是否出现刚刚我们在代码中打印的信息?如果出现相关服务名称,端口,地址等信息,说明服务发现成功。
以上是我们从客户端提供者的角度去发现服务,而我们知道,在注册中心注册的服务,本身就是服务的提供者,那么接下来,我们从服务消费者的角度,来看一下,是否能够获取发现到提供者注册的相关信息?
首先要修改消费者80模块,同样是修改ConsumerUserController.java类,添加服务发现的方法。
@RequestMapping("/consumer/user/discovery")
public Object discovery() {
return restTemplate.getForObject(URL + "/user/discovery", Object.class);
}
接下来进行测试,启动注册中心7001,服务提供者8001,消费者80,注意在这里需要启动提供者,因为我们通过消费者去进行服务发现,最终这个被发现的服务实例是提供者注册到注册中心的。启动完成后,访问localhost/consumer/user/discovery,观察结果。

再看一下控制台,同样的会打印服务名称,端口,地址等信息,也即从消费端的服务发现成功。
博客内容仅供自已学习以及学习过程的记录,如有侵权,请联系我删除,谢谢!
网友评论