Version: Next

服务发现 Discovery

对于注册进 Eureka 里面的微服务,可以通过服务发现来获取该微服务的信息

  • 这里是面向 客户端 而言的

步骤

  1. provider-payment8001Controller 中,注入 org.springframework.cloud.client.discovery.DiscoveryClient 对象

  2. 写一个 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 // 服务发现 Discovery
      private 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 主机名 端口号 URI
      log.info("********* " + instance.getInstanceId() +
      "\t" + instance.getHost() +
      "\t " + instance.getPort() +
      "\t" + instance.getUri() + " *********");
      }
      // 返回当前的 discoveryClient 对象
      return this.discoveryClient;
      }
      // ... 省略
  3. 在主启动类上添加 @EnableDiscoveryClient 注解

    @SpringBootApplication
    @EnableEurekaClient
    @EnableDiscoveryClient
    public 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 *********