Sentinel是微服務(wù)架構(gòu)中的限流器读整、熔斷器簿训,用于保護(hù)我們的服務(wù)。
官方文檔:Sentinel中文文檔
Sentinel的文檔寫的非常的棒米间!你想知道的一切都可以在文檔中找到强品。
啟動(dòng)Sentinel控制臺(tái)
下載地址:Sentinel控制臺(tái)下載
執(zhí)行命令java -Dserver.port=8888 -Dcsp.sentinel.dashboard.server=localhost:8888 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-x.x.x.jar
,設(shè)置控制臺(tái)IP和端口屈糊。
訪問http://127.0.0.1:8888/
賬密都是sentinel
就可以進(jìn)入管理控制臺(tái)了的榛。
或者你可以pull源碼下來,到dashboard模塊下執(zhí)行啟動(dòng)逻锐,這個(gè)模塊是一個(gè)SpringBoot項(xiàng)目夫晌,修改配置文件后可以直接運(yùn)行
Sentinel集成Nacos
Sentinel使用Nacos作為配置中心的話,需要在源碼上做一些小小調(diào)整昧诱,啟動(dòng)一個(gè)Nacos版本的控制臺(tái)晓淀。
DownLoad源碼
git clone https://github.com/alibaba/Sentinel.git
調(diào)整sentinel-dashboard的源碼
復(fù)制
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
要加上端口號,否則會(huì)拋報(bào)錯(cuò)
@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;
- 修改
src/main/webapp/resources/app/scripts/directives/sidebar/sidebar.html
開啟流控規(guī)則v1盏档,這個(gè)目錄下編輯限流規(guī)則會(huì)同步到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> 流控規(guī)則 V1</a>
</li>
- 修改
src/main/resources/application.properties
端口號為8888凶掰,默認(rèn)為8080
server.port=8888
- 啟動(dòng)
com.alibaba.csp.sentinel.dashboard.DashboardApplication#main
修改spring-boot-web項(xiàng)目配置
- pom引入sentinel相關(guān)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>
- 修改配置文件
application.yml
,增加sentinel配置妆丘,默認(rèn)會(huì)自動(dòng)掃描web資源锄俄;注意data-id一定要以-flow-rules為結(jié)尾、group-id為SENTINEL_GROUP勺拣,因?yàn)閟entinel管理后臺(tái)就是這種命名規(guī)范奶赠,可以去源碼中修改
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
-
啟動(dòng)web項(xiàng)目
這里需要請求一下web項(xiàng)目的接口,Sentinel的后臺(tái)就會(huì)開始收集web項(xiàng)目的資源信息药有。這里注意毅戈,他會(huì)自動(dòng)收集所有資源路徑苹丸,將其定義為他的資源
配置限流規(guī)則
-
查看Sentinel后臺(tái)
-
在流控規(guī)則V1中配置規(guī)則
-
第5步添加的流控規(guī)則會(huì)使用Nacos存儲(chǔ),所以我們可以在Nacos配置后臺(tái)看到
-
qps設(shè)置為1苇经,我們連點(diǎn)接口請求赘理,就會(huì)看到被攔截
Sentinel集成Dubbo
我們的項(xiàng)目使用Dubbo作為RPC框架,Sentinel提供了非常便捷的繼承方式扇单。
參見文檔:Sentinel主流框架適配
如果要對Dubbo接口做限流控制商模,需要添加一個(gè)Sentinel-Dubbo的適配器。
<!-- 限流器+Dubbo 引入之后會(huì)掃描Dubbo接口作為資源 -->
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-apache-dubbo-adapter</artifactId>
</dependency>
并且同樣的配置sentinel參數(shù)蜘澜。
啟動(dòng)項(xiàng)目施流,并訪問一次之后,控制臺(tái)開始收集Dubbo接口鄙信。
刪除web接口流控瞪醋,增加Dubbo接口流控規(guī)則
可以看到接口拋出了500異常