0、客戶端添加依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
1、eureka 客戶端 添加配置
endpoints.pause.enabled=true
endpoints.pause.sensitive=false
#用pause了 shutdown 就可以不開啟了
management.security.enabled=false
# restart 必須要開啟的,pause 必須要依賴 restart
endpoints.restart.enabled=true
2、注意配置
eureka.client.healthcheck.enabled=true
management.contextPath=/management
而當我們設置配置eureka.client.healthcheck.enabled=true
的時候,即使調用/pause
端點,Eureka上服務的狀態也會是UP
注:當應用在Eureka Server上的狀態已被標記為DOWN
,但是應用本身其實依然是可以正常對外服務的,並沒有被關閉,而在Spring Cloud中,Ribbon做負載均衡時,只會負載到標記為UP
的實例上。
3、服務啟動時,控制台會打印出所有端口
參考:
https://blog.csdn.net/u010629610/article/details/88045980
4、請求 /pause 接口后,該服務在eureka 上顯示 down ,但是 30秒內rubbon 還是會分配請求給這個服務,30秒后該服務不可用,
eureka.client.fetch-registry=true
eureka.client.registry-fetch-interval-seconds=5
這兩個配置 第一個默認是開啟,第二個意思是每5秒從eureka拉取一次服務列表信息,但是測試時還是30秒才更新,
原因是:
Eureka Server 針對請求響應ResponseCache,采用了一個2級緩存:readWrite cache讀寫緩存(存在過期時間) 和 readonly cache只讀緩存(沒有過期時間)
eureka: server: use-read-only-response-cache: true # 是否使用只讀緩存作為請求響應的緩存,默認啟用 response-cache-update-interval-ms: 30000 # 用於一級響應緩存多久更新一次,默認30秒 initial-capacity-of-response-cache: 1000 # 用於定義二級響應緩存的容量大小,默認1000 response-cache-auto-expiration-in-seconds: 180 # 二級響應緩存自動失效時間,默認180秒
- 一級二級緩存獲取規則
當開啟使用一級緩存時,會從一級緩存獲取信息,否則直接從二級緩存取
當第一次獲取緩存時(一級緩存為null),會從二級緩存獲取並將信息存入一級緩存(只讀緩存)中
緩存失效
-
一級緩存不存在自動失效期和手動清除
-
二級緩存存在默認180s自動清除以及當注冊服務下線,過期,注冊,狀態變更,都會來清除里面的數據
另外當二級緩存數據被清除以后以后,只能依靠定時任務刷新一級緩存里面的數據,也就是說最快也要等默認的30s才能更新一級緩存
- 一級緩存是默認開啟的,如果不能忍受這30秒的響應緩存變更延遲,可以手動禁止使用一級緩存,然后把二級緩存改為你能忍受的時間
參考:https://www.jianshu.com/p/71a8bdbf03f4