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等)。