1.下载sentinel jar
https://github.com/alibaba/Sentinel/releases
启动jar
nohup java -Dserver.port=9015 -Dcsp.sentinel.dashboard.server=192.168.56.101:9015 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.8.4.jar &>sentinel-server.log &r
访问控制台用户密码都是sentinel
http://192.168.56.101:9015/
2.配置微服务项目
2.1pom.xml
com.alibaba.cloud
spring-cloud-starter-alibaba-sentinel
com.alibaba
fastjson
1.2.83
注意fastJSON不要版本太高,否则会导致奇葩的问题com.alibaba.fastjson.JSONException: TODO
2.2sentinel配置
spring:
#微服务配置
cloud:
sentinel:
transport:
dashboard: 192.168.56.101:9015
client-ip: 192.168.56.1
port: 8719
client-ip是你服务所在服务器的ip,否则dashboard找不到你,怎么发配置给你呢
随便访问一个接口,dashboard才会看到服务进去了
然后就可以配置规则了
2.3 代码
@SentinelResource(value = "sayHello")
public Result sayHello(){
System.out.println("hello");
return Result.success("hello");
}
到这里就完成了最基础的sentinel,可以在界面上流控一下,立马能看到效果,下面接下来配置nacos持久化
高能注意:簇点链路 列表 里面除了@SentinelResource埋点的方法,还有 controller的接口,为什么没有埋点也可以在这里配置,引用官方的说法就是,自动的
注:一般推荐将
@SentinelResource
注解加到服务实现上,而在 Web 层直接使用 Spring Cloud Alibaba 自带的 Web 埋点适配。Sentinel Web 适配同样支持配置自定义流控处理逻辑,参考 相关文档。
当 Spring WebFlux 应用接入 Sentinel starter 后,所有的 URL 就自动成为 Sentinel 中的埋点资源,可以针对某个 URL 进行流控。
而且同时兼容了feign,好好看下这篇文章https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel
3.配置nacos持久化(动态规则)
3.1nacos添加一个规则格式是json的sentinelRule.json
[
{
"resource": "sayHello",
"limitApp": "default",
"grade": 1,
"count": 1,
"strategy": 0,
"controlBehavior": 0,
"clusterMode": false
}
]
bootstrap-dev.yml修改配置读取规则
sentinel:
transport:
dashboard: 192.168.56.101:9015
client-ip: 192.168.56.1
port: 8719
datasource:
ds2:
nacos:
server-addr: 192.168.56.101:8848
username: nacos
password: nacos
data-id: sentinelRule.json
group-id: DEFAULT_GROUP
data-type: json
# 规则类型,取值见: com.alibaba.cloud.sentinel.datasource.RuleType 会对应到dashboard的栏目中去
rule-type: flow
添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
这时候,随便就改 ncos中的配置,规则立马生效。
而且sentinue中也会里面看到配置的规则。
问题:
实际中肯定不希望在nacos改配置来改规则啊,在dashboard中多方便。
最终方案肯定是如下:在sentinel中改配置->然后在我的应用中立马生效,那么我们要做的就是,拉dashboard的源码,然后改造一下,把规则同步到nacos配置中心,官方文档也是这么推荐的。网上有一堆以及改好了的 拉下来用就好了。
参考:
https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel
https://github.com/alibaba/Sentinel/tree/master/sentinel-extension/sentinel-datasource-nacos
https://github.com/alibaba/Sentinel/tree/master/sentinel-demo/sentinel-demo-nacos-datasource
控制台通常需要做一些改造来直接推送应用维度的规则到配置中心。功能示例可以参考 AHAS Sentinel 控制台的规则推送功能。改造指南可以参考 在生产环境中使用 Sentinel 控制台。