1. 程式人生 > 其它 >HM-SpringCloud微服務系列8.5【規則持久化】

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(此前沒有持久化儲存時,重啟服務後會丟失規則,即限流失效)