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
就可以進入管理控制台了。
或者你可以pull源碼下來,到dashboard子產品下執行啟動,這個子產品是一個SpringBoot項目,修改配置檔案後可以直接運作
Sentinel內建Nacos
Sentinel使用Nacos作為配置中心的話,需要在源碼上做一些小小調整,啟動一個Nacos版本的控制台。
DownLoad源碼
git clone https://github.com/alibaba/Sentinel.git
調整sentinel-dashboard的源碼
- 複制
目錄到src/test/java/com/alibaba/csp/sentinel/dashboard/rule/nacos/
src/main/java/com/alibaba/csp/sentinel/dashboard/rule/
- 修改
要加上端口号,否則會抛報錯com.alibaba.csp.sentinel.dashboard.rule.nacos.NacosConfig#nacosConfigService
@Bean
public ConfigService nacosConfigService() throws Exception {
return ConfigFactory.createConfigService("localhost:8848");
}
- 修改
com.alibaba.csp.sentinel.dashboard.controller.v2.FlowControllerV2
@Autowired
@Qualifier("flowRuleNacosProvider")
private DynamicRuleProvider<List<FlowRuleEntity>> ruleProvider;
@Autowired
@Qualifier("flowRuleNacosPublisher")
private DynamicRulePublisher<List<FlowRuleEntity>> rulePublisher;
- 修改
開啟流控規則v1,這個目錄下編輯限流規則會同步到Nacossrc/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> 流控規則 V1</a>
</li>
- 修改
端口号為8888,預設為8080src/main/resources/application.properties
server.port=8888
- 啟動
com.alibaba.csp.sentinel.dashboard.DashboardApplication#main
修改spring-boot-web項目配置
- 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>
- 修改配置檔案
,增加sentinel配置,預設會自動掃描web資源;注意data-id一定要以-flow-rules為結尾、group-id為SENTINEL_GROUP,因為sentinel管理背景就是這種命名規範,可以去源碼中修改application.yml
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
-
啟動web項目
這裡需要請求一下web項目的接口,Sentinel的背景就會開始收集web項目的資源資訊。這裡注意,他會自動收集所有資源路徑,将其定義為他的資源
配置限流規則
- 檢視Sentinel背景
- 在流控規則V1中配置規則
- 第5步添加的流控規則會使用Nacos存儲,是以我們可以在Nacos配置背景看到
- qps設定為1,我們連點接口請求,就會看到被攔截
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接口。
删除web接口流控,增加Dubbo接口流控規則
可以看到接口抛出了500異常