spring-cloud /pause 平滑升級 踩坑記錄


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

 


免責聲明!

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



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