背景
产品高速迭代,通常伴随着高频次的版本发布。部署新版上线需要进行验证,不想让服务直接被客户端关注到(即服务默认注册到eureka,并且是UP状态)并进行调用。
原因解析
所有服务的状态保存在注册中心 Eureka Server 中。一个服务要想获取其他服务的实例列表和状态,需要定时从 Eureka Server 中获取并缓存下来,默认时间30秒发起一次,缓存Server 状态请求由 Eureka Client 发起,而不是基于长连接或者 Eureka Server 主动推送,所以无法立即知道其他服务状态变更。
解决方案
1、上线状态置为 OUT-OF-SERVICE,验证通过后手动更改为UP(推荐)
2、上线状态为UP,手动更改状态为 OUT-OF-SERVICE (不推荐)
3、直接取消服务自动向erueka注册(需要改源码,不推荐)
这里我们推荐第一种方案,具体操作如下:
1、修改配置文件,修改eureka.instance.initial-status:out-of-service
2、做验证,swagger 或者 mq 只消费一条消费等,方式不详细展开说了,这里不是本文重点
3、验证通过,手动修改服务状态为UP,验证不通过,也不会有线上流量进来.
上线方式如下:
http://【eureka服务ip:port】/eureka/apps/【服务名】/【实例名】/status?value=UP
修改为大家公司常用的方式即 : curl -X PUT "http://admin:root123@eureka.test.com/eureka/apps/DEMO-PROVIDER/172.16.XX.XXX:8080/status?value=UP"
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。