Version: Next
服务发现 Discovery
对于注册进 Eureka 里面的微服务,可以通过服务发现来获取该微服务的信息
- 这里是面向
客户端
而言的
步骤
在
provider-payment8001
的Controller
中,注入org.springframework.cloud.client.discovery.DiscoveryClient
对象写一个 controller 方法
discover()
,返回Object
类型,url 为/payment/discovery
获取 Eureka 注册中心所有服务名称的列表
// 获取 Eureka 注册中心中的 服务名称列表List<String> services = discoveryClient.getServices();for (String service : services) {log.info("********* service: [" + service + "] *********");}也可以使用 具体服务名称 获取其对应的所有节点实例
// 通过服务名获取其对应的所有服务节点List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
Controller
添加的代码PaymentController// ... 省略@Resource // 服务发现 Discoveryprivate DiscoveryClient discoveryClient;@GetMapping("/payment/discovery")public Object discovery() {// 获取 Eureka 注册中心中的 服务名称列表List<String> services = discoveryClient.getServices();for (String service : services) {log.info("********* service: [" + service + "] *********");}// 通过服务名获取其对应的所有服务节点List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");for (ServiceInstance instance : instances) {// id 主机名 端口号 URIlog.info("********* " + instance.getInstanceId() +"\t" + instance.getHost() +"\t " + instance.getPort() +"\t" + instance.getUri() + " *********");}// 返回当前的 discoveryClient 对象return this.discoveryClient;}// ... 省略在主启动类上添加
@EnableDiscoveryClient
注解@SpringBootApplication@EnableEurekaClient@EnableDiscoveryClientpublic class PaymentMain8001 {public static void main(String[] args) {SpringApplication.run(PaymentMain8001.class, args);}}
测试
重启
cloud-provider-payment8001
- 访问
http://localhost:8081/payment/discovery
{"order": 0,"services": ["cloud-order-service","cloud-payment-service"]}
- 同时
payment8001
的后台打印了相关日志信息********* service: [cloud-order-service] ****************** service: [cloud-payment-service] ****************** payment8001 192.168.0.101 8081 http://192.168.0.101:8081 ****************** payment8002 192.168.0.101 8082 http://192.168.0.101:8082 *********