思路
1、发布重启服务节点前,将请求流量转移到其他服务上
2、然后确定节点没有请求流量后,发布重启服务
思维导图
方式一,请求重试(不推荐)
不考虑流量转移,在网关上做请求重试
例如:SpringCloud Gateway 配置全局重试过滤器

spring: application: name: gateway cloud: gateway: discovery: locator: # 开启从注册中心动态创建路由的功能,利用微服务名进行路由 enabled: true # 使用小写service-id lower-case-service-id: true # 全局过滤器重试机制 default-filters: - name: Retry args: retries: 3 statuses: BAD_GATEWAY, GATEWAY_TIMEOUT methods: GET, POST backoff: firstBackoff: 100ms maxBackoff: 1s factor: 2 basedOnPreviousValue: true
缺点:可能造成请求被处理2次
方式二,操作节点下架(推荐)
1、在使用Nginx做网关时,可以通过修改Nginx的配置,来改变节点流量,从而实现优雅重启
2、在使用Gateway做网关时,可以通过注册中心,比如Nacos来操作下架节点,来改变节点流量,从而实现优雅重启
3、SpringBoot项目,推荐使用actuator来做项目停止