SpringCloudAlibaba(七):SpringCloudAlibaba Sentinel使用nacos管理配置

前一篇文章中我們已經完成了Sentinel限流的一個程序,通過Dashboard進行Sentinel的限流配置。不知道大家有沒有發現我們在使用Sentinel Dashboard的時候它本身是沒有數據庫的。所以它在重啓之後就會丟失我們配置的限流等規則。所以我們需要把限流的規則持久化一下。
在之前我們都會通過配置文件來管理相關的配置信息,但是我們之前已經用Nacos實現了集中化的配置管理。所以,這次我們也同樣使用Nacos來實現Sentinel規則的配置管理。

Nacos管理Sentinel限流規則

我們本次會用到Nacos與SentinelDashboard,所以首先保證兩個服務都處於啓動狀態。

集成依賴

pom修改配置
<dependencies>    <dependency>        <groupId>com.alibaba.csp</groupId>        <artifactId>sentinel-datasource-nacos</artifactId>    </dependency>    <dependency>        <groupId>com.alibaba.cloud</groupId>        <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-test</artifactId>        <scope>test</scope>    </dependency>    <dependency>        <groupId>org.springframework.boot</groupId>        <artifactId>spring-boot-starter-web</artifactId>    </dependency></dependencies>

對比上一篇增加了nacos的datasource。用以支持在nacos中配置限流規則。

修改配置文件application.properties
server.port=8999spring.application.name=sentinel-nacos-conf#   sentinel.dashboard配置spring.cloud.sentinel.transport.dashboard=localhost:8080#   nacos配置spring.cloud.sentinel.datasource.flow.nacos.server-addr=localhost:8848#   dataidspring.cloud.sentinel.datasource.flow.nacos.data-id=${spring.application.name}-sentinel-flowspring.cloud.sentinel.datasource.flow.nacos.group-id=DEFAULT_GROUP#   定義存儲規則的枚舉spring.cloud.sentinel.datasource.flow.nacos.rule-type=flow
創建啓動類與Rest接口
  • SentinelNacosConfApplication.java
@SpringBootApplicationpublic class SentinelNacosConfApplication {
public static void main(String[] args) { SpringApplication.run(SentinelNacosConfApplication.class,args); }
}
  • SentinelHelloController.java
@RestController@RequestMapping(value = "sentinel")public class SentinelHelloController {    private Logger LOG = LoggerFactory.getLogger(this.getClass());
@RequestMapping(value = "hello",method = RequestMethod.GET) public String hello(){ return "CainGao"; }
}

Nacos配置

Nacos增加Sentinel配置文件

nacos增加配置,基於 dataId 可以看到需要增加的配置名稱爲 sentinel-nacos-conf-sentinel-flow。配置內容爲:

[    {        "resource": "/sentinel/hello",        "limitApp": "default",        "grade": 1,        "count": 1,        "strategy": 0,        "controlBehavior": 0,        "clusterMode": false    }]
參數 解釋
resource 表示需要進行限流的資源
limitApp 流控針對的來源,default表示不區分來源
grade 限流閾值類型(QPS:0,併發線程數:1)
count 限流的閾值
strategy 判斷根據資源本身還是其他資源,默認爲資源本身
controlBehavior 攔截後的策略(0:直接拒絕/1:排隊等待/2:勻速等待)
clusterModel 是否爲集羣模式

設置完成後我們啓動應用,當應用啓動完成後進入Sentinel控制檯就會發現規則已經設置到了Sentinel Dashboard中。

可以看到流控規則已經寫入成功。

進行應用測試

總結

我們可以通過Nacos進行動態的管理Sentinel的各種規則,畢竟基於我們的場景來說更加希望配置能夠統一的進行管理。當然各種前期的約定就需要設計很多了。例如各種策略的配置名稱,畢竟是希望能夠讓所有人都能直接的基於約定來實現配置。不要出現 例如 我設置爲 {spring.application.name}-sentinel-flow,另外一個同事直接設置爲 {spring.application.name}-flow。

本文分享自微信公衆號 - 指尖數蟲(zhijianshuchong)。
如有侵權,請聯繫 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章