【解決方案】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/

從可用服務列表中剔除該服務

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

將該服務加到可用服務列表中

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

方案二 :

調用服務接口,服務向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' \

部署后執行命令

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

參考文檔

[1]: Eureka REST operations
[2]: SpringCloud微服務如何優雅停機及源碼分析
[3]: 實用技巧:Spring Cloud中,如何優雅下線微服務?
[4]: 服務如何做到優雅下線
[5]: Eureka優雅關閉服務
[6]: SpringCloud微服務如何優雅停機及源碼分析


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM