微服务之服务发现

195 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

前言

上一篇讲到了通过注册中心访问不同的服务实例,今天我们来讲服务发现的实践内容

简单来讲,就是对于注册进Eureka的微服务,获取到这个微服务的具体信息

源码地址

操作

添加对应的代码

主启动类增加注解@EnableDiscoveryClient

image.png

image.png

image.png

@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调用接口,发现到有两个服务的信息返回

image.png

image.png

控制台打印的服务对象信息

Eureka自我保护

image.png

图上的信息代表Eureka的自我保护机制,某时刻某个服务不可用时,短期内Eureka不会立刻清理,依旧会对微服务的信息进行保存,不会盲目注销可能健康的微服务信息

如何关闭Eureka的自我保护,因为默认是开启的,我们做到一旦某个服务一定时间内无法成功调用,直接清理

eureka.server.enable-self-preservation: false
eureka.server.eviction-interval-timer-in-ms: 2000

image.png

image.png

可以看到提示已经关闭成功了

Eureka的客户端心跳配置

#    Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
lease-renewal-interval-in-seconds: 1
#    Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
lease-expiration-duration-in-seconds: 2