【解决方案】SpringCloud项目优雅发版、部署

背景

SpringCloud分布式项目,部署在多个节点上。一般的发版方式是,使用Kill -15 pid,逐一地关闭、部署、重启。

但中间涉及到一个问题,当执行kill命令时,服务虽然关闭,但Eureka那里依然保存着这台服务器的IP,请求依然会跑到这台服务器上。

直到持续数十秒后,Eureka将该服务的IP剔除掉。

如果请求量大,会导致大量请求在发版的过程中出现异常。所以要想到一个更优雅的方式来部署服务。

方案一:

调用Eureka的接口,让Eureka自动剔除该服务IP。

获取服务的AppID和InstanceID,分别对应响应中的<app>instanceId

curl -X GET \
  http://IP:port/eureka/apps/

789766-20190731211746564-232372136.png

从可用服务列表中剔除该服务

curl -X PUT \
  'http://IP:port/eureka/apps/AppID/InstanceID/status?value=DOWN' \

789766-20190731211943041-1182811986.png

将该服务加到可用服务列表中

curl -X PUT \
  'http://IP:port/eureka/apps/AppID/InstanceID/status?value=UP' \

789766-20190731211833010-1990017899.png

方案二 :

调用服务接口,服务向Eureka报告为不可用状态

项目中增加配置,重点是service-registry

management.endpoints.web.exposure.include=health,info,service-registry

部署前执行命令

curl -X POST \
  'http://IP:port/actuator/service-registry?status=DOWN' \
  -H 'content-type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8' \

789766-20190731211920529-420805405.png

部署后执行命令

curl -X POST \
  'http://IP:port/actuator/service-registry?status=UP' \
  -H 'content-type: application/vnd.spring-boot.actuator.v2+json;charset=UTF-8' \

789766-20190731211836398-60892107.png

参考文档

[1]: Eureka REST operations
[2]: SpringCloud微服务如何优雅停机及源码分析
[3]: 实用技巧:Spring Cloud中,如何优雅下线微服务?
[4]: 服务如何做到优雅下线
[5]: Eureka优雅关闭服务
[6]: SpringCloud微服务如何优雅停机及源码分析

转载于:https://www.cnblogs.com/fonxian/p/11278846.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值