问题复现:
启动了fission应用
直接kill掉了此应用的进程,但是在注册中心依然显示UP状态
问题解决:
Eureka Client端配置:
#设置Eureka Client向Eureka Server发送心跳的时间间隔,默认是30,单位是秒
eureka.instance.lease-renewal-interval-in-seconds=1
#表示eureka server至上一次收到client的心跳之后,等待下一次心跳的超时时间
#在这个时间内若没收到下一次心跳,则将移除该instance,(默认90秒)
eureka.instance.lease-expiration-duration-in-seconds=5
Eureka Server端配置:
#设为false,关闭自我保护,从而保证会注销微服务
eureka.server.enable-self-preservation=false
#无效客户端清理间隔(单位毫秒,默认是60*1000)
eureka.server.eviction-interval-time-in-ms=2000
埋坑:
通过心跳检测eureka client进程是否正常运作这种方法无法保证此应用能否正常进行业务处理,大多数应用都会有一些其他的外部资源依赖,比如数据库,redis缓存等,如果我们的应用与这些外部资源无法连通的时候,实际上已经不能提供正常的对外服务了,但因为客户端心跳依然在运行,所以它还是会被服务消费者调用,而这样的调用实际上并不能获得预期的后果。