美文网首页
(三)Spring Cloud Eureka 常用配置

(三)Spring Cloud Eureka 常用配置

作者: deve_雨轩 | 来源:发表于2021-08-23 13:53 被阅读0次

    关闭自我保护

    保护模式主要在一组客户端和 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>
    
    • lease-renewal-interval-in-seconds: 表示 Eureka Client 发送心跳给 server 端的频率。
    • lease-expiration-duration-in-seconds: 表示 Eureka Server 至上一次收到 client 的心跳之后,等待下一次心跳的超时时间,在这个时间内若没收到下一次心跳,则移除该 Instance

    更多的 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 中提供了事件监昕的方式来扩展 。

    • EurekaInstanceCanceledEvent 服务下线事件 。
    • EurekaInstanceRegisteredEvent 服务注册事件。
    • EurekaInstanceRenewedEvent 服务续约事件。
    • EurekaRegistryAvailableEvent Eureka 注册中心启动事件。
    • EurekaServerStartedEvent Eureka Server 启动事件。

    基于 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 启动事件监听
        }
    
    }
    

    相关文章

      网友评论

          本文标题:(三)Spring Cloud Eureka 常用配置

          本文链接:https://www.haomeiwen.com/subject/ypqliltx.html