HM-SpringCloud微服務系列8.5【規則持久化】
現在,sentinel的所有規則都是記憶體儲存,重啟後所有規則都會丟失。在生產環境下,我們必須確保這些規則的持久化,避免丟失。
1. 規則管理模式
規則是否能持久化,取決於規則管理模式,sentinel支援三種規則管理模式:
1.1 原始模式(預設)
原始模式:控制檯配置的規則直接推送到Sentinel客戶端,也就是我們的應用。然後儲存在記憶體中,服務重啟則丟失。
1.2 pull模式
pull模式:控制檯將配置的規則推送到Sentinel客戶端,而客戶端會將配置規則儲存在本地檔案或資料庫中。以後會定時去本地檔案或資料庫中查詢,更新本地規則。
1.3 push模式(推薦)
push模式:控制檯將配置規則推送到遠端配置中心,例如Nacos。Sentinel客戶端監聽Nacos,獲取配置變更的推送訊息,完成本地配置更新。
1.4 小結
2. 實現push模式
2.1 步驟1
修改OrderService,讓其監聽Nacos中的sentinel規則配置。
在order-service中引入sentinel監聽nacos的依賴:
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
在order-service中的application.yml檔案配置nacos地址及監聽的配置資訊:
spring:
cloud:
sentinel:
datasource:
flow:
nacos:
server-addr: localhost:8848 # nacos地址
dataId: orderservice-flow-rules
groupId: SENTINEL_GROUP
rule-type: flow # 還可以是:degrade、authority、param-flow
重啟order服務
例如以後需要在限流配置上+降級配置,可以如下配置(複製一份換名即可)
2.2 步驟2
2.3 步驟3
2.4 步驟4
PS:步驟2&3&4較為繁瑣,在此不做演示,只用課程資料中老師修改完打包好的直接執行檢視效果
先停掉之前開啟的正常未修改的sentinel服務
啟動方式跟官方一樣:通過命令java -jar sentinel-dashboard.jar
注意:如果要修改nacos地址,需要新增引數:-D
nacos地址須與order服務中配置的一致,如果待開啟包內原先配置的不是,則可以通過+命令
-Dnacos.addr=localhost:8848
進行修改
此處實際加不加都行,因為包內老師改的就是8848,以下命令僅做演示
瀏覽器訪問nacos控制檯
訪問sentinel控制檯發現的啥也木有
訪問http://localhost:8088/order/101觸發簇點鏈路
F12開啟除錯模式清空當前頁面快取
在此頁面新增的流控規則會被持久化儲存到nacos
測試一下吧
此時訪問http://localhost:8088/order/101,發現已被限流
現在重啟order服務,再次訪問發現規則還在,還是被限流ok(此前沒有持久化儲存時,重啟服務後會丟失規則,即限流失效)