当前位置:   article > 正文

Sentinel集成Nacos数据源_sentinel-datasource-nacos

sentinel-datasource-nacos

1.1 安装Sentinel控制台

在https://github.com/alibaba/Sentinel/releases页面下载控制台的jar包,放到服务器某个文件夹下

通过如下命令来启动控制台程序,-Dserver.port指定了端口为9010,如果出现端口冲突,可以指定其他端口

java -Dserver.port=9010 -Dcsp.sentinel.dashboard.server=localhost:9010 -Dproject.name=sentinel-dashboard  -jar -Xms512m -Xmx512m -XX:+HeapDumpOnOutOfMemoryError  $APP_NAME >/dev/null 2>
&1 &
  • 1
  • 2

通过http://localhost:9010就可以访问控制台,用户名和密码默认为sentinel/sentinel

1.2 配置Sentinel

shop-user模块的pom文件中添加相应的依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4

然后在yaml文件中配置客户端与控制台通信端口以及控制台地址

spring:
  cloud:
    sentinel:
      transport:
      	# sentinel客户端与控制台通信端口号(默认为8719,可以任意指定)
        port: 8719 
        dashboard: xxx.com:9010
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

启动shop-user应用,随便调用一个接口,就可以在sentinel的控制台看到shop-user服务的相关信息

注:sentinel是懒加载模式,只有调用了接口,才能在控制台看到服务,也可以通过设置spring.cloud.sentinel.eager:true,服务启动就建立心跳连接

详细的使用参考:https://github.com/alibaba/spring-cloud-alibaba/wiki/Sentinel

1.3 配置持久化

在Sentinel中,可以通过控制台为每个客户端设置各种各样的规则,但这些规则默认是存储在内存中,每次重复服务,配置都会被情况,不适用于生产环境。因此Sentinel提供了pullpush的动态扩展,这两种方式分别对应不同的数据源

模式支持扩展数据源获取规则方式优点缺点
pull动态文件数据源、Consul、Eureka定期轮询接入简单实时性差
pushZookeeper、Redis、Nacos、Apollo监听规则变化一致性,实时性高规则同步至数据源比较复杂

以Sentinel集成Nacos做数据源为例

shop-userpom文件中添加相应的依赖

<!-- sentinel集成nacos作为数据源  -->
<dependency>
    <groupId>com.alibaba.csp</groupId>
    <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>
  • 1
  • 2
  • 3
  • 4
  • 5

然后在配置文件配置数据源的相关属性,由于spring.cloud.sentinel.datasource属性对应的是一个Map,所以它的需要自定义指定Map的KEY,下面的配置中ds就作为KEY,然后后面就可以配置不同的数据源

spring:
  cloud:
    sentinel:
      datasource:
        ds:
          nacos:
            server-addr: 127.0.0.1:8848
            namespace: 24712b7c-05ad-4b79-af97-1d202431f521
            dataId: shop-user-sentinel.json
            groupId: LZ_GROUP_MASTER
            rule-type: flow
            data-type: json
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

DataSourcePropertiesConfiguration中可以看到不同数据源对应的属性类,具体的参数可以参考这些属性类

public class DataSourcePropertiesConfiguration {

   private FileDataSourceProperties file;

   private NacosDataSourceProperties nacos;

   private ZookeeperDataSourceProperties zk;

   private ApolloDataSourceProperties apollo;

   private RedisDataSourceProperties redis;

   private ConsulDataSourceProperties consul;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

然后在Nacos的控制台创建限流规则的配置

配置内容如下:

[
    {
        "resource": "/user/test",
        "limitApp": "default",
        "grade": 1,
        "count": 2,
        "strategy": 0,
        "controlBehavior": 0,
        "clusterMode": false
    }
]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • resource:资源名,即限流规则的作用对象
  • limitApp:流控针对的调用来源,若为 default 则不区分调用来源
  • grade:限流阈值类型(QPS 或并发线程数);0代表根据并发数量来限流,1代表根据QPS来进行流量控制
  • count:限流阈值
  • strategy:调用关系限流策略
  • controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队)
  • clusterMode:是否为集群模式

Sentinel控制台不具备同步修改Nacos配置的能力,而Nacos由于可以通过在客户端中使用Listener来实现自动更新。所以,在整合了Nacos做规则存储之后,需要知道在下面两个地方修改存在不同的效果:

  • Sentinel控制台中修改规则:仅存在于服务的内存中,不会修改Nacos中的配置值,重启后恢复原来的值。

  • Nacos控制台中修改规则:服务的内存中规则会更新,Nacos中持久化规则也会更新,重启后依然保持。

注:《SpringCloudAlibaba微服务原理与实战》这本书上提供了Sentinel控制台流控规则到Nacos的同步

在配置Sentinel的数据源时,一定要在后面datasource属性后面加上一个额外的字符串,作为数据源Map的KEY

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/512589
推荐阅读
相关标签
  

闽ICP备14008679号