Alibaba Sentinel规则持久化-推模式-手把手教程【基于Nacos】
前面,已經為Sentinel實現了 基于拉模式的規則持久化 ,本文來實現基于 推模式的規則持久化。
文章目錄
- 一、推模式架構圖
- 二、原理簡述
- 三、微服務改造
- 3.1. 加依賴
- 3.2. 添加配置
- 四、Sentinel控制臺改造
- 五、編譯 & 啟動
- 六、測試
- 測試1:
- 測試2:
- 測試3:
- 七、萬里長征才進行了第一步…
- 八、懶人包
- 九、推模式優缺點分析
- 十、參考文檔
- 十一、案例測試
- 11.1. 下載
- 11.2. 啟動
- 11.3. 清空瀏覽器緩存
- 11.4. 訪問口控制臺
- 11.5. 接口請求
- 11.6. 登陸nacos
- 11.7. 添加降級規則
- 11.8. nacos查看降級規則
- 11.9. 內容中心和 Sentinel控制臺服務關閉
- 11.10. 重新啟動服務
- 11.11. 登陸Sentinel控制臺查看降級規則
一、推模式架構圖
圖片引用自 https://github.com/alibaba/Sentinel/wiki/在生產環境中使用-Sentinel
二、原理簡述
控制臺推送規則:
將規則推送到Nacos或其他遠程配置中心
Sentinel客戶端鏈接Nacos,獲取規則配置;并監聽Nacos配置變化,如發生變化,就更新本地緩存(從而讓本地緩存總是和Nacos一致)
控制臺監聽Nacos配置變化,如發生變化就更新本地緩存(從而讓控制臺本地緩存總是和Nacos一致)
三、微服務改造
3.1. 加依賴
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId> </dependency>3.2. 添加配置
spring:cloud:sentinel:datasource:# 名稱隨意flow:nacos:server-addr: localhost:8848dataId: ${spring.application.name}-flow-rulesgroupId: SENTINEL_GROUP# 規則類型,取值見:# org.springframework.cloud.alibaba.sentinel.datasource.RuleTyperule-type: flowdegrade:nacos:server-addr: localhost:8848dataId: ${spring.application.name}-degrade-rulesgroupId: SENTINEL_GROUPrule-type: degradesystem:nacos:server-addr: localhost:8848dataId: ${spring.application.name}-system-rulesgroupId: SENTINEL_GROUPrule-type: systemauthority:nacos:server-addr: localhost:8848dataId: ${spring.application.name}-authority-rulesgroupId: SENTINEL_GROUPrule-type: authorityparam-flow:nacos:server-addr: localhost:8848dataId: ${spring.application.name}-param-flow-rulesgroupId: SENTINEL_GROUPrule-type: param-flow四、Sentinel控制臺改造
控制臺改造主要是為規則實現
DynamicRuleProvider:從Nacos上讀取配置
DynamicRulePublisher:將規則推送到Nacos上
修改pom.xml,找到:
將 test 這一行注釋掉,即改為如下:
<!-- for Nacos rule publisher sample --> <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId><!--<scope>test</scope>--> </dependency>找到 sentinel-dashboard/src/test/java/com/alibaba/csp/sentinel/dashboard/rule/nacos目錄,將整個目錄拷貝到 sentinel-dashboard/src/main/java/com/alibaba/csp/sentinel/dashboard/rule/nacos,如圖:
修改 com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2 ,找到
修改為:
@Autowired @Qualifier("flowRuleNacosProvider") private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider; @Autowired @Qualifier("flowRuleNacosPublisher") private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;修改 sentinel-dashboard/src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html,找到:
<!--<li ui-sref-active="active">--><!--<a ui-sref="dashboard.flow({app: entry.app})">--><!--<i class="glyphicon glyphicon-filter"></i> 流控規則 V1</a>--> <!--</li>-->把注釋解開,即改為:
<li ui-sref-active="active"><a ui-sref="dashboard.flow({app: entry.app})"><i class="glyphicon glyphicon-filter"></i> 流控規則 V1</a> </li>齊活兒啦!終于把流控規則改造成推模式持久化啦!
五、編譯 & 啟動
執行 mvn clean package -DskipTests
在項目的 target 目錄找到sentinel-dashboard.jar ,執行 java -jar sentinel-dashboard.jar 啟動控制臺。
六、測試
測試1:
用Sentinel控制臺【菜單欄的 流控規則 V1 】推送流控規則,規則會存儲到Nacos;
測試2:
直接在Nacos上修改流控規則,然后刷新Sentinel控制臺,控制臺上的顯示也會被修改;
測試3:
重啟Sentinel控制臺,并重啟微服務;刷新控制臺,可以發現規則依然存在。
七、萬里長征才進行了第一步…
以上,其實只實現了流控規則的持久化。Sentinel有若干種規則,例如降級規則、系統規則、授權規則、熱點規則等,都需要使用類似的方式,修改 com.alibaba.csp.sentinel.dashboard.controller 包中對應的Controller,才能實現持久化。
八、懶人包
已經基于Sentinel Dashboard 1.6.2做了修改,為如下規則提供了持久化:
- 流控規則
- 降級規則
- 系統規則
- 授權規則
- 參數熱點規則
GitHub地址:https://github.com/eacdy/Sentinel-Dashboard-Nacos ,
使用1.6.2-NACOS分支即可。
使用說明:https://github.com/eacdy/Sentinel-Dashboard-Nacos/releases
修改的文件:
九、推模式優缺點分析
優點
規則持久化
一致性好
性能優秀
改動多、并且麻煩
引入額外的依賴(Nacos)
十、參考文檔
https://github.com/alibaba/Sentinel/wiki/在生產環境中使用-Sentinel十一、案例測試
如果需要二次開發,請切換到使用1.6.2-NACOS分支下載源碼開發即可
11.1. 下載
GitHub地址:https://github.com/eacdy/Sentinel-Dashboard-Nacos/releases
11.2. 啟動
java -jar sentinel-dashboard-1.6.2-NACOS.jar11.3. 清空瀏覽器緩存
11.4. 訪問口控制臺
http://localhost:8080/
11.5. 接口請求
Sentine控制臺采用懶加載,因此,需要請求一下服務接口,后期可以修改懶加載策略關閉
11.6. 登陸nacos
http://localhost:8848/nacos
11.7. 添加降級規則
11.8. nacos查看降級規則
刷新nacos,查看降級規則
11.9. 內容中心和 Sentinel控制臺服務關閉
略
11.10. 重新啟動服務
重新啟動 Sentinel控制臺和內容中心
11.11. 登陸Sentinel控制臺查看降級規則
從上圖可以看出,測試通過!
總結
以上是生活随笔為你收集整理的Alibaba Sentinel规则持久化-推模式-手把手教程【基于Nacos】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: rabbitmq配置文件字段spring
- 下一篇: PMP答题技巧(详细版)