SpringCloud服務如何在Eureka安全優雅的下線
阿新 • • 發佈:2018-12-18
原文:https://www.cnblogs.com/yangzhilong/p/7161941.html
如果直接KILL SpringCloud的服務,因為Eureka採用心跳的機制來上下線服務,會導致服務消費者呼叫此已經kill的服務提供者然後出錯,處理這種情況有2中方案。
一、利用Spring Boot Actuato的管理端點(推薦)
1、pom中引用Actuato
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
2、properties中新增如下內容
#啟用shutdown endpoints.shutdown.enabled=true #禁用密碼驗證 endpoints.shutdown.sensitive=false # 禁用actuator管理端鑑權 management.security.enabled=false # 開啟重啟支援 endpoints.restart.enabled=true
如果只允許本機訪問,可以新增如下屬性
#(只允許本機訪問) server.address=localhost
3、在伺服器上用curl傳送post請求到pause.
curl -X POST http://localhost:8080/pause
此時eurake上該服務被標記問下線,但該服務其實還是可以正常訪問的,當client還未及時更新本地Instances快取時,依然不會中斷服務。當所有client都感知到該服務DOWN後就不會再往該服務發請求了。
4、在伺服器上利用curl傳送shutdown命令
curl -X POST http://localhost:8080/shutdown 或者 curl -d "" http://localhost:8080/shutdown
二、利用Eureka的rest管理端點下線服務
eureka介面註冊的服務:
傳送DELETE的Restfull請求
對照關係看上面的2張圖。
注意:由於cloud服務是心跳檢測,所有在eureka進行DELETE後要快速的停止服務,否則服務可能會被重新註冊上。