功能:
对于注册进euerka里面的微服务,可以通过服务发现来获得该服务的信息
简单来说:服务发现有三个角色,服务提供者、服务消费者和服务中介。
服务中介是联系服务提供者和服务消费者的桥梁。
服务提供者将自己提供的服务地址注册到服务中介,服务消费者从服务中介那里查找自己想要的服务地址,然后使用这个服务。
服务中介提供多个服务,每个服务对应多个服务提供者。服务中介就是一个字典,字典里有很多key-value键值对,key是服务名称,value是服务提供者的地址列表。服务注册就是调用字典的put方法放东西,服务查找就是调用字典的get方法获取东西
当服务提供者新加入时,要求服务中介能及时告知服务消费者。
步骤:
一、修改cloud-provider-payment8001的controller
@RestController
@Slf4j
public class PaymentController {
@Resource
private PaymentService paymentService;
@Value("${server.port}")
private String serverPort;
/**
* 通过服务发现来获取该服务信息
*/
@Resource
private DiscoveryClient discoveryClient;
@PostMapping(value = "/payment/create")
public CommonResult Create(@RequestBody Payment payment){
int result=paymentService.create(payment);
log.info("插入结果------"+result);
if(result>0){
return new CommonResult(200,"插入成功,serverPort"+serverPort,result);
}else {
return new CommonResult(404,"插入失败 ",null);
}
}
@GetMapping(value = "/payment/get/{id}")
public CommonResult getPaymentId(@PathVariable("id") Long id){
Payment payment=paymentService.getPaymentById(id);
log.info("插入结果------"+payment);
if(payment!=null){
return new CommonResult(200,"查询成功,serverPort"+serverPort,payment);
}else {
return new CommonResult(404,"查询失败 ",null);
}
}
@GetMapping(value = "/payment/discovery")
public Object discovery(){
/**
* 获取服务列表的信息实例
*/
List<String> services=discoveryClient.getServices();
for (String element: services
) {
log.info("************"+element);
}
// 获取一个微服务下面的具体实例
List<ServiceInstance> instances= discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
for (ServiceInstance instance:instances
) {
log.info(instance.getServiceId()+"\t"+instance.getHost()+"\t"+instance.getPort()+"\t"+instance.getUri());
}
return this.discoveryClient;
}
}
二、修改8001主启动类
添加注解@EnableDiscoveryClient
@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient
public class PaymentMain8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8001.class,args);
}
}
三、启动服务
查看控制台所输出的数据。
浏览器输出效果图: