(三)Spring Cloud Eureka 常用配置

2021-08-23  本文已影响0人  deve_雨轩

关闭自我保护

保护模式主要在一组客户端和 Eureka Server 之间存在网络分区场景时使用。一旦进入保护模式,Eureka Server 将会尝试保护其服务的注册表中的信息,不再删除服务注册表中的数据。当网络故障恢复后,该 Eureka Server 节点会自动退出保护模式。

eureka:
    server:
        enable-self-preservation: false //关闭自我保护

自定义 Eureka 的 InstanceID

客户端在注册时,服务的 Instance ID 的默认值的格式如下:

${spring.cloud.client.hostname}:${spring.application.name}:${spring.application. instance id:${server.port}}

其实就是“主机名:服务名称:服务端口”

如果想把主机名替换成 IP

eureka:
    instance:
        instance-id: ${spring.application.name}:${spring.cloud.client.ipaddress}:${server.port}

使用 IP 进行注册

eureka:
    instance:
        preferipAddress: true

自定义实例调整链接

通过配置实现了用 IP 进行注册,当点击 Instance ID 进行跳转的时候, 就可以用 IP 跳转了,跳转的地址默认是 IP+Port/info 。我们可以自定义这个跳转的地址:

eureka:
    instance:
        status-page-url: http://${spring.cloud.client.ip-address}:${server.port}/swagger-ui.html

快速移除已经失效的服务信息

在实际开发过程中,我们可能会不停地重启服务,由于 Eureka 有自己的保护机制,故节点下线后,服务信息还会一直存在于 Eureka 中。我们可以通过增加一些配置让移除的速度更快一点,当然只在开发环境下使用,生产环境下不推荐使用。
首先在 eureka-server 中增加两个配置,分别是关闭自我保护和清理间隔:

eureka:
    server:
        enable-self-preservation: false
        eviction-interval-timer-in-ms: 5000 ## 默认 60000 毫秒

然后在客户端服务配置如下:

eureka:
    client:
        healthcheck:
            enabled: true ## 开启健康检查
    instance:
        lease-renewal-interval-in-seconds: 5 ##默认 30 秒
        lease-expiration-duration-in-seconds: 5 ##默认 30 秒

开启健康检查,需要在 pom.xml 中引入 actuator的依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

更多的 Instance 配置信息可参考源码中的配置类:org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean
更多的 Server 配置信息可参考源码中的配置类:org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean

元数据使用

Eureka 的元数据有两种类型,分别是框架定好了的标准元数据和用户自定义元数据。标准元数据指的是主机名、IP 地址、端口号、状态页和健康检查等信息,这些信息都会被发布在服务注册表中,用于服务之间的调用。自定义元数据可以使用 eureka.instance.metadataMap 进行配置。

自定义元数据说得通俗点就是自定义配置,我们可以为每个 Eureka Client 定义一些属于自己的配置,这个配置不会影响 Eureka 的功能。自定义元数据可以用来做一些扩展信息,比如灰度发布之类的功能,可以用元数据来存储灰度发布的状态数据,Ribbon 转发的时候就可以根据服务的元数据来做一些处理。当不需要灰度发布的时候可以调用 Eureka 提供的 REST API 将元数据清除掉。

eureka:
    instance:
        metadataMap:
            version: 1.0

EuekaClient 使用

当我们的项目中集成了 Eureka 之后,可以通过 EurekaClient 来获取一些我们想要的数据,比如上面提的元数据。我们就可以直接通过 EurekaClient 来获取。

@Autowired
private EurekaClient eurekaClient;

除了使用 EurekaClient,还可以使用 DiscoveryClient, 不是Eureka 自带的, 是 Spring Cloud 重新封装的,类的路径为 org.springframework.cloud.client.discovery.DiscoveryClient

健康检查

默认情况下,Eureka 客户端是使用心跳和服务端通信来判断客户端是否存活,在某些场景下,比如服务对应的数据库出现了异常,但应用进程还是存在的,这意味着服务可以继续上报心跳,但其实此时的服务已经不能够正常提供服务了。

Spring Boot Actuator 提供了/actuator/health 端点,该端点可展示应用程序的健康信息, 当应用服务异常时,通过扩展健康检查的端点调整健康检查逻辑

eureka:
    client:
        healthcheck:
            enabled: true

开启健康检查,在 pom.xml 中引入 actuator的依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
public class CustomHealthIndicator extends AbstractHealthindicator {
    protected void doHealthCheck(Builder builder) throws Exception {
    
    }
}

服务上下线监控

在某些特定的需求下,我们需要对服务的上下线进行监控,上线或下线都进行邮件通知,Eureka 中提供了事件监昕的方式来扩展 。

基于 Eureka 提供的事件机制,可以监控服务的上下线过程

@Component
public class EurekaStateChangeListener {

    @EventListener
    public void listen(EurekaInstanceCanceledEvent event){
        //服务下线监听
    }

    @EventListener
    public void listen(EurekaInstanceRegisteredEvent event){
        //服务注册事件监听
    }

    @EventListener
    public void listen(EurekaInstanceRenewedEvent event){
        //服务续约事件监听
    }

    @EventListener
    public void listen(EurekaRegistryAvailableEvent event){
        //注册中心启动监听
        // 通过查看 EurekaServerInitializerConfiguration 源码 EurekaRegistryAvailableEvent 在 EurekaServerStartedEvent 之前发送
    }

    @EventListener
    public void listen(EurekaServerStartedEvent event){
        //Eureka Server 启动事件监听
    }

}
上一篇下一篇

猜你喜欢

热点阅读