持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情
前言
上一篇讲到了通过注册中心访问不同的服务实例,今天我们来讲服务发现的实践内容
简单来讲,就是对于注册进Eureka的微服务,获取到这个微服务的具体信息
操作
添加对应的代码
主启动类增加注解@EnableDiscoveryClient
@RequestMapping(value = "/discovery", method = RequestMethod.GET)
public Object discovery() {
List<String> service = discoveryClient.getServices();
for (String element: service) {
log.info("element: {}", element);
}
List<ServiceInstance> serviceInstances = discoveryClient.getInstances("PAYMENT-SERVICE");
for (ServiceInstance instance: serviceInstances) {
log.info(instance.getServiceId() + "\t" + instance.getHost() + "\t" + instance.getPort() + "\t" + instance.getUri());
}
return this.discoveryClient;
}
通过Postman调用接口,发现到有两个服务的信息返回
控制台打印的服务对象信息
Eureka自我保护
图上的信息代表Eureka的自我保护机制,某时刻某个服务不可用时,短期内Eureka不会立刻清理,依旧会对微服务的信息进行保存,不会盲目注销可能健康的微服务信息
如何关闭Eureka的自我保护,因为默认是开启的,我们做到一旦某个服务一定时间内无法成功调用,直接清理
eureka.server.enable-self-preservation: false
eureka.server.eviction-interval-timer-in-ms: 2000
可以看到提示已经关闭成功了
Eureka的客户端心跳配置
# Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
lease-renewal-interval-in-seconds: 1
# Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
lease-expiration-duration-in-seconds: 2