本篇将介绍eureka注册中心的一些常用配置。

注册与获取服务

第1篇中,eureka注册中心启动时报错。因为默认情况下eureka自身也是注册中心的一个服务,也会向注册中心注册以及获取服务,而此时是没有注册中心的,所以报错,并且每隔一段时间会重新偿试连接注册中心。当注册中心也就是它自己启动成功以后,它重连成功,之后不再报错。而通常注册中心并不需要注册和获取服务,可作以下配置

eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false

此时再启动注册中心,不会再报错。并且访问http://localhost:8761/也不会再看到注册中心自己。

显示服务ip

当有服务注册到注册中心时,默认会显示其主机名,如下Status列

spring cloud eureka 替代品_registerWithEureka

这个名字不便于识别,而且以后还会造成其他问题。可修改server的相关配置,将其id名改为ip地址

eureka:
  instance:
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

spring cloud eureka 替代品_instance-id_02

保护模式

假如我现在强制关闭server,在注册中心列表中仍然会显示它,而且Status是UP,现在我们来看一下eureka的控制台日志。

spring cloud eureka 替代品_fetchRegistry_03

左边的时间可以看出,eureka每隔1分钟会做一件事,日志中描述为Running the evict task with compensationTime,逐出任务。前3条日志耗时0毫秒,注册中心仍然会显示Server,Status是UP。第4条日志耗时1毫秒,此时注册中心页面会显示以下内容。

spring cloud eureka 替代品_shutdown _04

当我非正常关闭server时,eureka会考虑可能是临时网络信号不好,不会立即逐出它,而是等待server重新建立连接。但是过了几分钟后,始终没有等到server,于是将它加入逐出列表。逐出任务每分钟会执行一次,但是此时仍然不会真正逐出,因为server有可能发生停电或故障,需要几小时或者几天还是可以恢复,并没有真实下线。这段红字意思就是说进入了保护模式,保护server不被逐出。

关闭保护模式

在开发时,可能经常会非正常关闭,通过配置可以关闭保护模式。

eureka:
  server:
    enable-self-preservation: false

此时注册中心页面会显示另一段红字,已经关闭保护模式等内容。此时不会再保护server,而是直接将它逐出。

优雅的关闭

如果我们想正常的关闭某个服务,我以前有讲过,对该服务中配置如下:

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

management:
  endpoint:
    shutdown:
      enabled: true
  endpoints:
    web:
      exposure:
        include: shutdown

此时用post请求http://ip:port/actuator/shutdown 可优雅关闭该服务

spring cloud eureka 替代品_shutdown _05