sentinel基于nacos使用案例

springCloud | 2022-07-06 23:14:05

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 控制台

登录后即可回复 登录 | 注册
    
关注编程学问公众号