springCloud生产部署时如何不间断服务

在springCloud集群生产环境下,部署某个微服务子应用时,可以将某个应用通过restApi将其从eureka上down掉,但是部署更新启动后,怎么先他先不要注册到eureka,而由内部链路访问测试没问题再注册至eureka对外服务?
已邀请:

itmuch.com - 《Spring Cloud与Docker微服务架构实战》作者

赞同来自: 泥瓦匠BYSocket

这个问题有很多的方法,这里列举几个:
1. /pause端点。
注册到Eureka的微服务,/pause端点一旦被请求,其在Eureka Server上的服务状态就会标记为DOWN(状态有四种取值:UP/DOWN/OUT_OF_SERVICE/UNKNOWN),而调用时,微服务请求UP的微服务。
2. 直接kill微服务。
通过命令
kill pid
的形式,微服务即可优雅下线。
3. 重试。
重试是个比较范围较广的话题,ribbon/feign/zuul各自有不同的重试机制。各组件的重试,可以参考我当初的总结issue:https://github.com/spring-cloud/spring-cloud-netflix/issues/1577
 
===
应该还有其他的办法,大家可以各抒己见。

泥瓦匠BYSocket - bysocket.com

赞同来自: chenssy

立立 以后出个文章吧

xiaobaxi - Fang Oba

赞同来自:

内部链路访问测试怎么测?

程序猿DD - http://blog.didispace.com

赞同来自:

补充一下立立说的。
 
关于直接kill,本身就是优雅关闭的,但是在注销服务操作时依然会有客户端调用这个即将关闭的实例,所以配合重试可以比较好的实现高可用。但是这种方法由于重试机制本身需要接口支持重复调用,同时也要允许重试产生的高延迟。所以,还有一种比较简单的做法就是先调用/pause端点来让服务下线,由于服务的下线需要一定的延迟之后才能被消费方发现,因此可以sleep一个经验值,然后再kill。
 
当然也可以用更高级的蓝绿发布、灰度发布等策略。
 
 

yueshenye

赞同来自:

调用/pause端点来让服务下线后,eureka server 一直显示 DOWN 并且一直不剔除,请问这个多久会剔除呢?

要回复问题请先登录注册