文章目錄
- Sentinel 規則持久化
- 一、修改order-service服務
- 1.引入依賴
- 2.配置nacos地址
- 第二步修改非常麻煩,可以略過,直接使用已經打好包的來使用
- 二、修改sentinel-dashboard源碼
- 1. 解壓
- 2. 修改nacos依賴
- 3. 添加nacos支持
- 4. 修改nacos地址
- 5. 配置nacos數據源
- 6. 修改前端頁面
- 7. 重新編譯、打包項目
- 8.啟動
- 9. 瀏覽器端測試
- 10. 修改好后的sentinel規則可持久化文件
Sentinel 規則持久化
需要大量修改源碼,很麻煩,下面也只是修改了一小部分
阿里有一個收費的sentinel云服務,開源sentinel沒有實現最佳版本可能就是為了給收費版讓路吧
一、修改order-service服務
修改OrderService,讓其監聽Nacos中的sentinel規則配置。
具體步驟如下:
1.引入依賴
在order-service中引入sentinel監聽nacos的依賴:
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
2.配置nacos地址
在order-service中的application.yml文件配置nacos地址及監聽的配置信息:
spring:cloud:sentinel:datasource:flow:nacos:server-addr: localhost:8848 # nacos地址dataId: orderservice-flow-rulesgroupId: SENTINEL_GROUPrule-type: flow # 還可以是:degrade、authority、param-flow
直接從datasource開始復制,粘貼過去
第二步修改非常麻煩,可以略過,直接使用已經打好包的來使用
鏈接:https://pan.baidu.com/s/1mffAD62BZt3IDp59NxO7OQ
提取碼:hzan
二、修改sentinel-dashboard源碼
SentinelDashboard默認不支持nacos的持久化,需要修改源碼。
1. 解壓
解壓課前資料中的sentinel源碼包:
然后并用IDEA打開這個項目,結構如下:
2. 修改nacos依賴
在sentinel-dashboard源碼的pom文件中,nacos的依賴默認的scope是test,只能在測試時使用,這里要去除:
將sentinel-datasource-nacos依賴的scope去掉:
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
3. 添加nacos支持
在sentinel-dashboard的test包下,已經編寫了對nacos的支持,我們需要將其拷貝到main下。
4. 修改nacos地址
然后,還需要修改測試代碼中的NacosConfig類:
復制后的
修改其中的nacos地址,讓其讀取application.properties中的配置:
/*** @author Eric Zhao* @since 1.4.0*/
@Configuration
@ConfigurationProperties(prefix = "nacos")
public class NacosConfig {// nacos地址private String addr;@Beanpublic ConfigService nacosConfigService() throws Exception {return ConfigFactory.createConfigService(addr);}public String getAddr() {return addr;}public void setAddr(String addr) {this.addr = addr;}@Beanpublic Converter<List<FlowRuleEntity>, String> flowRuleEntityEncoder() {return JSON::toJSONString;}@Beanpublic Converter<String, List<FlowRuleEntity>> flowRuleEntityDecoder() {return s -> JSON.parseArray(s, FlowRuleEntity.class);}}
在sentinel-dashboard的application.properties中添加nacos地址配置:
nacos.addr=localhost:8848
5. 配置nacos數據源
另外,還需要修改com.alibaba.csp.sentinel.dashboard.controller.v2包下的FlowControllerV2類:
讓我們添加的Nacos數據源生效:
6. 修改前端頁面
接下來,還要修改前端頁面,添加一個支持nacos的菜單。
修改src/main/webapp/resources/app/scripts/directives/sidebar/目錄下的sidebar.html文件:
將其中的這部分注釋打開:
修改其中的文本:
<li ui-sref-active="active" ng-if="entry.appType==0"><a ui-sref="dashboard.flow({app: entry.app})"><i class="glyphicon glyphicon-filter"></i> 流控規則-NACOS</a>
</li>
7. 重新編譯、打包項目
運行IDEA中的maven插件,編譯和打包修改好的Sentinel-Dashboard:
報錯就先clean,再package
打包好的文件如下,可以直接使用,就不要自己動手改了,確實很麻煩
鏈接:https://pan.baidu.com/s/1YpHITSBC3dUSAj8zQF_niQ
提取碼:hzan
復制到一個目錄下,并重命名,以示區分
8.啟動
啟動方式跟官方一樣:
java -jar sentinel-dashboard.jar
如果要修改nacos地址,需要添加參數:(可以動態指定nacos的地址,外部依賴的地址,當然要動態指定啦)
java -jar -Dnacos.addr=localhost:8848 sentinel-dashboard.jar
9. 瀏覽器端測試
先正常登錄nacos,然后訪問一個資源,觸發一個簇點鏈路
然后可能地址沒換,之前的官方nacos前端有緩存,需要清空一下,清空指定網頁緩存操作如下圖
然后就會出現我們修改的基于nacos持久化的流控規則
那么目前在流控規則-nacos
菜單下新建的規則可以持久化
其他菜單還是不行,得一個個修改,所以修改量會非常大,這也只是修改了一小部分
新增試試
到nacos下面看:多出了一個配置項: orderservice-flow-rules
訪問:http://localhost:10010/order/101?authorization=admin
確實被限流了
重啟OrderApplication微服務,以前會丟失,現在不會丟失了
(其他菜單下新建規則,然后重啟OrderApplication微服務,查看確實丟失了)
10. 修改好后的sentinel規則可持久化文件
打包好的文件如下,可以直接使用,就不要自己動手改了,確實很麻煩
鏈接:https://pan.baidu.com/s/1YpHITSBC3dUSAj8zQF_niQ
提取碼:hzan