springcloud+eureka 如何实现优雅下线?

查看 34|回复 2
作者:pvcxy18   
eureka 下有 1 个 A 服务节点,此时发布了第 2 个 A 服务节点(新版本),在发布成功后,会停止第 1 个节点服务。此时在 eureka 图形界面中,会以“DOWN”的形式标注出这个即将被关闭的节点。
但是此时流量仍然可以进入该节点,会导致接口异常。虽然过段时间,等服务彻底停止后,eureka 会调整策略,流量全部走向新节点,但是中间会有一段时间体验很差。
想问下各位公司里通常采用什么方式解决?
ps: 我在网上找到的优雅下线相关案例,往往需要运维层面配合。能否不依赖运维,通过服务本身去实现,即 知道自己的服务要被杀死了,提前通知 eureka 进行主动下线。(这一点我尝试过几次,但效果均不太理想,主动下线有延迟,且优先级很低,通知 eureka 太晚了)

eureka, 节点, 服务, 此时

mmdsun   
刚好负载到下线的那个节点,导致接口不可用?
应用网关\或者服务加个重试,切换到下一个实例应该就行吧?
spring.cloud.loadbalancer.retry.enabled=true
spring.cloud.loadbalancer.retry.max-retries-on-next-service-instance=2
yisheyuanzhang   
我是手动注册一个 shutdownHook 替代 SpringContextShutdownHook 。在 shutdownHook 中主动下线后休眠 15s ,再执行 context.close()关闭服务
服务关闭是 kill pid 。 会触发自定义 shutdownHook 的关闭逻辑,保证关闭后有 15s 的缓冲期来处理请求。
您需要登录后才可以回帖 登录 | 立即注册

返回顶部