springcloud微服务(九)-服务发现Discovery

Discovery功能:

对于注册进Eureka里面的微服务,可以通过服务发现来获取服务的信息。此处以payment8001为例。payment8002与payment8001一样。

1. 修改cloud-prodvider-payment8001的controller。

@RestController
@Slf4j
public class PaymentController {

    @Autowired
    private PaymentServices paymentServices;

    @Value("${server.port}")
    private String serverPort;

    @Autowired
    private DiscoveryClient discoveryClient;//服务发现,就是展示服务的一些信息

    @GetMapping("/payment/get/{id}")
    public CommonResult<Payment> getPaymentById(@PathVariable("id") Long id)
    {
         Payment payment=paymentServices.getPaymentById(id);
         log.info("********查询结果*********:"+payment);
         if(payment != null)
         {
             return new CommonResult<>(200,"查询数据成功,serverport:"+serverPort,payment);
         }else
         {
             return new CommonResult<>(444,"查询到对应的记录,查询ID:"+id);
         }

    }
    @PostMapping("/payment/create")
    public CommonResult addPayment(@RequestBody Payment payment)
    {

       int result = paymentServices.addPayment(payment);
       log.info("******插入结果:"+result);
       if(result>0)
       {
           return new CommonResult(200,"插入成功");
       }else
       {
           return new CommonResult(445,"插入失败");
       }
    }

    @GetMapping("/payment/discovery")
    public Object getDiscovery()
    {
        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) {
            log.info(instance.getHost()+"\t"+instance.getInstanceId()+"\t"+instance.getPort()+"\t"+instance.getServiceId());
        }
        return this.discoveryClient;
    }
}

2. 主启动类修改,需增加服务发现注解

@SpringBootApplication
//@EnableEurekaClient
@EnableDiscoveryClient
public class PaymentMain8001 {
    public static void main(String[] args)
    {
        SpringApplication.run(PaymentMain8001.class,args);
    }
}

2.1 请注意我把Eureka服务发现的注解替换成了注解@EnableDiscoveryClient

@EnableDiscoveryClient和@EnableEurekaClient共同点就是:都是能够让注册中心能够发现,扫描到该服务。

不同点:@EnableEurekaClient只适用于Eureka作为注册中心,@EnableDiscoveryClient 可以是适用于Eureka作为注册中心,也适用于其他注册中心(例如Zookeeper、Consul等)。