天天看點

SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo

Sentinel是微服務架構中的限流器、熔斷器,用于保護我們的服務。

官方文檔:Sentinel中文文檔

Sentinel的文檔寫的非常的棒!你想知道的一切都可以在文檔中找到。

啟動Sentinel控制台

下載下傳位址:Sentinel控制台下載下傳

執行指令

java -Dserver.port=8888 -Dcsp.sentinel.dashboard.server=localhost:8888 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-x.x.x.jar

,設定控制台IP和端口。

通路

http://127.0.0.1:8888/

賬密都是

sentinel

就可以進入管理控制台了。

SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo

或者你可以pull源碼下來,到dashboard子產品下執行啟動,這個子產品是一個SpringBoot項目,修改配置檔案後可以直接運作

Sentinel內建Nacos

Sentinel使用Nacos作為配置中心的話,需要在源碼上做一些小小調整,啟動一個Nacos版本的控制台。

DownLoad源碼
git clone https://github.com/alibaba/Sentinel.git
           
調整sentinel-dashboard的源碼
  1. 複制

    src/test/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/

    目錄到

    src/main/java/com/alibaba/csp/sentinel/dashboard/rule/

  2. 修改

    com.alibaba.csp.sentinel.dashboard.rule.nacos.NacosConfig#nacosConfigService

    要加上端口号,否則會抛報錯
@Bean
    public ConfigService nacosConfigService() throws Exception {
        return ConfigFactory.createConfigService("localhost:8848");
    }
           
  1. 修改

    com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2

@Autowired
    @Qualifier("flowRuleNacosProvider")
    private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
    @Autowired
    @Qualifier("flowRuleNacosPublisher")
    private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;

           
SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo
  1. 修改

    src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html

    開啟流控規則v1,這個目錄下編輯限流規則會同步到Nacos
<li ui-sref-active="active" ng-if="entry.appType==0">
            <a ui-sref="dashboard.flow({app: entry.app})">
              <i class="glyphicon glyphicon-filter"></i>&nbsp;&nbsp;流控規則 V1</a>
          </li>
           
SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo
  1. 修改

    src/main/resources/application.properties

    端口号為8888,預設為8080
server.port=8888
           
  1. 啟動

    com.alibaba.csp.sentinel.dashboard.DashboardApplication#main

    SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo
修改spring-boot-web項目配置
  1. pom引入sentinel相關jar
<!-- 限流器 -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>
        <!-- 限流器配置 引入之後使用nacos作為sentinel配置中心 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-datasource-nacos</artifactId>
        </dependency>
           
  1. 修改配置檔案

    application.yml

    ,增加sentinel配置,預設會自動掃描web資源;注意data-id一定要以-flow-rules為結尾、group-id為SENTINEL_GROUP,因為sentinel管理背景就是這種命名規範,可以去源碼中修改
spring:
    sentinel:
      transport:
        dashboard: localhost:8888
        log:
          dir: ${logging.file.path}/sentinel/
      datasource:
        ds:
          nacos:
            server-addr: localhost:8848
            data-id: ${spring.application.name}-flow-rules
            group-id: SENTINEL_GROUP
            rule-type: flow
           
  1. 啟動web項目

    這裡需要請求一下web項目的接口,Sentinel的背景就會開始收集web項目的資源資訊。這裡注意,他會自動收集所有資源路徑,将其定義為他的資源

    SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo
配置限流規則
  1. 檢視Sentinel背景
    SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo
  2. 在流控規則V1中配置規則
    SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo
  3. 第5步添加的流控規則會使用Nacos存儲,是以我們可以在Nacos配置背景看到
    SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo
    SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo
  4. qps設定為1,我們連點接口請求,就會看到被攔截
    SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo

Sentinel內建Dubbo

我們的項目使用Dubbo作為RPC架構,Sentinel提供了非常便捷的繼承方式。

參見文檔:Sentinel主流架構适配

如果要對Dubbo接口做限流控制,需要添加一個Sentinel-Dubbo的擴充卡。

<!-- 限流器+Dubbo 引入之後會掃描Dubbo接口作為資源 -->
        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-apache-dubbo-adapter</artifactId>
        </dependency>
           

并且同樣的配置sentinel參數。

啟動項目,并通路一次之後,控制台開始收集Dubbo接口。

SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo

删除web接口流控,增加Dubbo接口流控規則

SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo

可以看到接口抛出了500異常

SpringCloudAlibaba內建搭建Sentinel+Nacos+Dubbo

繼續閱讀