SpringCloud(五):Eureka服务发现

原创文章,转载请注明原文章地址,谢谢!

前面已经说到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 list() {
        return userService.list();
    }

    @GetMapping("/user/discovery")
    public Object discovery() {
        List services = discoveryClient.getServices();
        List 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,观察结果。

再看一下控制台,同样的会打印服务名称,端口,地址等信息,也即从消费端的服务发现成功。

博客内容仅供自已学习以及学习过程的记录,如有侵权,请联系我删除,谢谢!

你可能感兴趣的:(SpringCloud(五):Eureka服务发现)