本篇将介绍eureka注册中心的一些常用配置。
注册与获取服务
在第1篇中,eureka注册中心启动时报错。因为默认情况下eureka自身也是注册中心的一个服务,也会向注册中心注册以及获取服务,而此时是没有注册中心的,所以报错,并且每隔一段时间会重新偿试连接注册中心。当注册中心也就是它自己启动成功以后,它重连成功,之后不再报错。而通常注册中心并不需要注册和获取服务,可作以下配置
eureka:
client:
registerWithEureka: false
fetchRegistry: false
此时再启动注册中心,不会再报错。并且访问http://localhost:8761/也不会再看到注册中心自己。
显示服务ip
当有服务注册到注册中心时,默认会显示其主机名,如下Status列
这个名字不便于识别,而且以后还会造成其他问题。可修改server的相关配置,将其id名改为ip地址
eureka:
instance:
instance-id: ${spring.cloud.client.ip-address}:${server.port}
保护模式
假如我现在强制关闭server,在注册中心列表中仍然会显示它,而且Status是UP,现在我们来看一下eureka的控制台日志。
左边的时间可以看出,eureka每隔1分钟会做一件事,日志中描述为Running the evict task with compensationTime,逐出任务。前3条日志耗时0毫秒,注册中心仍然会显示Server,Status是UP。第4条日志耗时1毫秒,此时注册中心页面会显示以下内容。
当我非正常关闭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 可优雅关闭该服务