2

背景

产品高速迭代,通常伴随着高频次的版本发布。部署新版上线需要进行验证,不想让服务直接被客户端关注到(即服务默认注册到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
eureka yml 配置

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"

ruanjianershu
27 声望9 粉丝

人行天地间 忽如远行客