Sentinel Client:整合 Apollo 規則持久化
在前面的學習過程中,Sentinel 的規則,也就是我們之前定義的限流規則,是通過程式碼的方式定義好的。這是初始化時需要做的事情,Sentinel 提供了基於API的方式修改規則:
當我們接入了控制檯後,可以通過控制檯進行規則的動態修改,問題是當應用程式重啟後規則資訊就會恢復到初始化的階段,也就是說後面修改的值會丟失,因為規則資訊都是儲存在應用的記憶體中。
為了解決這個問題Sentinel 提供了DataSource 擴充套件的功能,官方推薦通過控制檯設定規則後將規則推送到統一的規則中心,客戶端實現 ReadableDataSource 介面端監聽規則中心實時獲取變更,流程如下:
擴充套件的常見方式有推和拉兩種模式:
-
拉模式:客戶端主動向某個規則管理中心定期輪詢拉取規則,這個規則中心可以是 RDBMS、檔案,甚至是 VCS 等。這樣做的方式是簡單,缺點是無法及時獲取變更;
-
推模式:規則中心統一推送,客戶端通過註冊監聽器的方式時刻監聽變化,比如使用 Nacos、Apollo、Zookeeper 等配置中心。這種方式有更好的實時性和一致性保證。
今天我們主要是講如何使用 Apollo 來配置規則進行持久化,Apollo是攜程開源的配置中心,非常好用
Github地址:https://github.com/ctripcorp/apollo
在我的書中也有對Apollo使用的詳細介紹,等出版了再通知大家。
首先整合需要的依賴:
然後建立 ApolloDataSource 並將其註冊至對應的 RuleManager 上即可。比如:
到此為止配置就結束了,詳細的解釋我都寫了註釋哈。官方文件也是這麼寫的,問題是如果你剛接觸會一頭霧水的,為什麼?
你不知道在Apollo中怎麼配置啊,我們講的就是說可以用Apollo來作為儲存,持久化規則,那麼規則怎麼配置就需要我們自己去想。
我也是通過看原始碼才知道怎麼去配置的,帶著大家一起來看原始碼吧!
主要就是new ApolloDataSource這裡,引數都是通過這裡傳進去的
這邊就是對傳入的引數賦值,然後看下面這行:
這就是通過名稱空間去Apollo中獲取配置,獲取完後就執行初始化
initializeConfigChangeListener是初始化配置的監聽器,當配置發生修改時會進入該監聽器,也就是說在這個監聽器裡需要監聽配置的修改,然後更新規則
loadAndUpdateRules就是更新規則的邏輯了
那麼配置是怎麼來的呢,請看loadConfig
readSource就是獲取我們配置的flowRulesKey的值,那麼配置其實就是一個字串,然後下面通過Json轉換
我們再返過來看看註冊的程式碼:
重點是ource -> JSON.parseObject(source, new TypeReference<list
我們配置一個試試看:
點選儲存並且釋出,可以在initializeConfigChangeListener裡面設定一個斷點,你會發現,當釋出配置之後,這邊馬上就會進來,然後執行其他的邏輯,到此為止整個流程結束。
相關文章:
本月書籍贈送活動正在進行中,詳情請檢視文章瞭解: