Sentinel集成Nacos数据源

超、凢脫俗 2023-10-01 19:09 68阅读 0赞

1.1 安装Sentinel控制台

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

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

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

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

1.2 配置Sentinel

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

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

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

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

启动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 定期轮询 接入简单 实时性差
push Zookeeper、Redis、Nacos、Apollo 监听规则变化 一致性,实时性高 规则同步至数据源比较复杂

以Sentinel集成Nacos做数据源为例

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

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

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

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

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

  1. public class DataSourcePropertiesConfiguration {
  2. private FileDataSourceProperties file;
  3. private NacosDataSourceProperties nacos;
  4. private ZookeeperDataSourceProperties zk;
  5. private ApolloDataSourceProperties apollo;
  6. private RedisDataSourceProperties redis;
  7. private ConsulDataSourceProperties consul;
  8. }

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

watermark_type_d3F5LXplbmhlaQ_shadow_50_text_Q1NETiBAc2VybW9ubGl6aGk_size_20_color_FFFFFF_t_70_g_se_x_16

配置内容如下:

  1. [
  2. {
  3. "resource": "/user/test",
  4. "limitApp": "default",
  5. "grade": 1,
  6. "count": 2,
  7. "strategy": 0,
  8. "controlBehavior": 0,
  9. "clusterMode": false
  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

发表评论

表情:
评论列表 (有 0 条评论,68人围观)

还没有评论,来说两句吧...

相关阅读