sentinel与nacos集成

前言

sentinel的规则可以通过编码方式定义,也可以通过配置方式定义。sentinel-dashboard提供了界面维护功能,但是配置是存储在内存中的。因此需要进行持久化。

Sentinel自身就支持了多种不同的数据源来持久化规则配置,目前包括以下几种方式:

  • 文件配置
  • Nacos配置
  • ZooKeeper配置
  • Apollo配置

注意:这些持久化只是指,客户端能够从持久化存储中获取规则定义,sentinel-dashboard的界面维护的配置仍然是在内存中

准备工作

  • 准备Nacos环境
  • 准备sentinel-dashboard 环境

客户端使用Nacos存储

引入扩展

<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId></dependency><dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId><version>1.8.1</version></dependency>
</dependencies>

指定sentinel配置

# sentinel dashboard
spring.cloud.sentinel.transport.dashboard=localhost:8080
# nacos 地址。
spring.cloud.sentinel.datasource.ds.nacos.server-addr=localhost:8848
#设置 sentinel的dataId。
spring.cloud.sentinel.datasource.ds.nacos.dataId=${spring.application.name}-sentinel
spring.cloud.sentinel.datasource.ds.nacos.groupId=DEFAULT_GROUP
spring.cloud.sentinel.datasource.ds.nacos.namespace=4392f929-fa22-4ea0-8cce-16a04b21d73f
spring.cloud.sentinel.datasource.ds.nacos.rule-type=flow

yaml配置

spring:cloud:sentinel:transport:dashboard: 192.168.1.70:7990   #自己的sentinel dashboard url。#port: 8719                   # 这个port是client port,会显示在dashboard的机器列表中。发布的端口,可以通过 http://localhost:8719/getRules?type=<XXXX> 获取规则datasource: ds:					#这是规则的id,自定义,唯一即可。nacos:server-addr: 192.168.1.54:8848namespace: 4392f929-fa22-4ea0-8cce-16a04b21d73fdata-id: jurassic-sample-biz-sentinelgroup-id: DEFAULT_GROUPrule-type: flow

以上配置是放在启动配置中的,也可以把这些配置放在Nacos中。动态维护,而不需要每次更新配置。

2种方式 都需要 重启 服务。

在Nacos中配置规则

在Naocs中创建相关dataId,并在配置中输入以下内容:

[{"resource": "/T1/sentinel","limitApp": "default","grade": 1,"count": 5,"strategy": 0,"controlBehavior": 0,"clusterMode": false}
]

Nacos的配置更新,会立即同步到客户端。

2024-02-04 16:55:50.702 INFO [NacosDataSource] New property value received for (properties: {namespace=4392f929-fa22-4ea0-8cce-16a04b21d73f, serverAddr=192.168.1.54:8848}) (dataId: jurassic-sample-biz-sentinel, groupId: DEFAULT_GROUP): [{"resource": "/T1/sentinel","limitApp": "default","grade": 1,"count": 0.5,"strategy": 0,"controlBehavior": 0,"clusterMode": false}
]

测试规则

1、启动

#表示已启动
024-02-04 10:49:15.502  INFO 10660 --- [           main] c.a.c.s.SentinelWebAutoConfiguration     : [Sentinel Starter] register SentinelWebInterceptor with urlPatterns: [/**].2024-02-04 11:50:13.012 INFO [NacosDataSource] New property value received for (properties: {namespace=4392f929-fa22-4ea0-8cce-16a04b21d73f, serverAddr=192.168.1.54:8848}) (dataId: jurassic-sample-biz-sentinel, groupId: DEFAULT_GROUP): [{"resource": "/T1/sentinel","limitApp": "default","grade": 1,"count": 5,"strategy": 0,"controlBehavior": 0,"clusterMode": false}
]2024-02-04 13:23:57.549 INFO [FlowRuleManager] Registering new property to flow rule manager
2024-02-04 13:23:57.552 INFO [FlowRuleManager] Flow rules loaded: {/T1/sentinel=[FlowRule{resource=/T1/sentinel, limitApp=default, grade=1, count=5.0, strategy=0, refResource=null, controlBehavior=0, warmUpPeriodSec=10, maxQueueingTimeMs=500, clusterMode=false, clusterConfig=null, controller=com.alibaba.csp.sentinel.slots.block.flow.controller.DefaultController@1895f7fe}]}

2、调用

使用postman调用接口:/T1/sentinel

调用如果操作限制,则抛出异常:

Blocked by Sentinel (flow limiting)

3、异常处理

异常处理由以下类控制:AbstractSentinelInterceptor,默认使用:DefaultBlockExceptionHandler

附录

参考

官网:https://sentinelguard.io/zh-cn/docs/introduction.html

启动配置:https://sentinelguard.io/zh-cn/docs/startup-configuration.html

规则配置:https://sentinelguard.io/zh-cn/docs/dynamic-rule-configuration.html

git:https://github.com/alibaba/Sentinel

Sentinel Dashboard中修改规则同步到Apollo

Sentinel Dashboard中修改规则同步到Nacos

Sentinel配置

@ConfigurationProperties(prefix = "spring.cloud.sentinel"
)
@Validated
public class SentinelProperties {private boolean eager = false;private boolean enabled = true;private String blockPage;private Map<String, DataSourcePropertiesConfiguration> datasource;private Transport transport;private Metric metric;private Servlet servlet;private Filter filter;private Flow flow;private Log log;private Boolean httpMethodSpecify;private Boolean webContextUnify;
}    public static class Transport {private String port = "8719";private String dashboard = "";private String heartbeatIntervalMs;private String clientIp;}public static class Filter {private int order = Integer.MIN_VALUE;private List<String> urlPatterns = Arrays.asList("/**");private boolean enabled = true;}    

datasource

public class DataSourcePropertiesConfiguration {private FileDataSourceProperties file;private NacosDataSourceProperties nacos;private ZookeeperDataSourceProperties zk;private ApolloDataSourceProperties apollo;private RedisDataSourceProperties redis;private ConsulDataSourceProperties consul;
}
public class AbstractDataSourceProperties {private @NotEmpty String dataType = "json";private @NotNull RuleType ruleType;private String converterClass;
}    
public class NacosDataSourceProperties extends AbstractDataSourceProperties {private String serverAddr;private String username;private String password;private @NotEmpty String groupId = "DEFAULT_GROUP";private @NotEmpty String dataId;private String endpoint;private String namespace;private String accessKey;private String secretKey;}  public enum RuleType {FLOW("flow", FlowRule.class),DEGRADE("degrade", DegradeRule.class),PARAM_FLOW("param-flow", ParamFlowRule.class),SYSTEM("system", SystemRule.class),AUTHORITY("authority", AuthorityRule.class),GW_FLOW("gw-flow", "com.alibaba.csp.sentinel.adapter.gateway.common.rule.GatewayFlowRule"),GW_API_GROUP("gw-api-group", "com.alibaba.csp.sentinel.adapter.gateway.common.api.ApiDefinition");
}

各规则的Json格式

FlowRule

{"grade": 0,"count": 0.0,"strategy": 0,"refResource": "refResource_d1adb0f536cc","controlBehavior": 0,"warmUpPeriodSec": 0,"maxQueueingTimeMs": 0,"clusterMode": false,"clusterConfig": {"flowId": 0,"thresholdType": 0,"fallbackToLocalWhenFail": false,"strategy": 0,"sampleCount": 0,"windowIntervalMs": 0,"resourceTimeout": 0,"resourceTimeoutStrategy": 0,"acquireRefuseStrategy": 0,"clientOfflineTime": 0},"resource": "resource_87dcdbb0e7e4","limitApp": "limitApp_ecab5e46394a"
}

DegradeRule

{"grade": 0,"count": 0.00,"timeWindow": 0,"minRequestAmount": 0,"slowRatioThreshold": 0.00,"statIntervalMs": 0,"resource": "resource_8b836771d2a7","limitApp": "limitApp_232e830b5584"
}

AuthorityRule

{"strategy": 0,"resource": "resource_5740d7b5468a","limitApp": "limitApp_e6f232966690"
}
public static final int AUTHORITY_WHITE = 0;
public static final int AUTHORITY_BLACK = 1;

SystemRule

{"highestSystemLoad": 0.00,"highestCpuUsage": 0.00,"qps": 0.00,"avgRt": 0,"maxThread": 0,"resource": "resource_f465bfe8bd71","limitApp": "limitApp_108cb5b2e198"
}

ParamFlowRule

{"grade": 0,"paramIdx": 0,"count": 0.00,"controlBehavior": 0,"maxQueueingTimeMs": 0,"burstCount": 0,"durationInSec": 0,"paramFlowItemList": [{"object": "object_710e6d4acd92","count": 0,"classType": "classType_419ab5d85a6f"}],"hotItems": {},"clusterMode": false,"clusterConfig": {"flowId": 0,"thresholdType": 0,"fallbackToLocalWhenFail": false,"sampleCount": 0,"windowIntervalMs": 0},"resource": "resource_9a4243d72d21","limitApp": "limitApp_7dc330e03e36"
}

sentinel的日志

sentinel的日志位置:${USER_HOME}\logs\csp\C:\Users\79219\logs\csp\

日志文件类型:

  • sentinel-block.log:拦截日志
  • jurassic-sample-biz-metrics.log.2024-02-04.2:监控日志
  • sentinel-record.log.2024-02-04.0:运行日志

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/793454.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Swing中的FlowLayout/WrapLayout在打横排列时候如何做到置顶对齐

前言 最近在开发swing客户端时候碰到一个棘手的问题&#xff1a; Swing中的FlowLayout/WrapLayout在打横排列时候如何做到置顶对齐如果是vue或者react&#xff0c;一搜百度什么都出来了&#xff0c;swing的话&#xff0c;嗯。。。资料有点少而且大部分是stack overflow上面的…

Docker环境安装Postgresql数据库Posrgresql 15.6

宿主机是ubuntu 22.04版本 ubuntu宿主机上安装docker&#xff0c;参见官方文档https://docs.docker.com/engine/install/ubuntu/, docker-ce是社区版 docker-ee是企业版 1、检查Docker是否安装 rootODS1SPGOFSDEV:~# docker Command docker not found, but can be installed …

51单片机学习笔记12 SPI接口 使用1302时钟

51单片机学习笔记12 SPI接口 使用1302时钟 一、DS1302简介1. 功能特性2. 涓流充电3. 接口介绍时钟数据和控制线&#xff1a;电源线&#xff1a;备用电池连接&#xff1a; 二、寄存器介绍1. 控制寄存器2. 时间寄存器3. 日历/时钟寄存器 三、BCD码介绍四、DS1302时序1. 读时序2. …

大数据实验三-HBase编程实践

目录 一&#xff0e;实验内容 二&#xff0e;实验目的 三&#xff0e;实验过程截图及说明 1、安装HBase 2、配置伪分布式模式&#xff1a; 3、使用hbase的shell命令来操作表&#xff1a; 4、使用hbase提供的javaAPI来编程实现类似操作&#xff1a; 5、实验总结及心得体会…

如何降低AI功耗? —— 超低功耗的仿生硬件

一、背景 仿生硬件&#xff08;Bionic Hardware&#xff09;这一术语通常指的是受自然界的生物系统启发而设计制造的电子或机械硬件设备&#xff0c;它们在功能、结构、材料、能源效率等方面模仿生物体的特性&#xff0c;以实现更高效、智能、自适应或环境友好的性能。在人工智…

unity之 “Allow ‘unsafe‘ code“ 在哪里。

导入unity中的代码&#xff0c;出现如下错误&#xff0c;该如何解决&#xff1f; Unsafe code may only appear if compiling with /unsafe. Enable "Allow unsafe code" in Player Settings to fix this error 解决这个问题&#xff0c;只需要设置就可以。 设置的地…

达梦体系结构:数据库文件

达梦体系结构&#xff1a;数据库文件 存储结构表空间与数据文件配置参数文件控制文件其他数据库文件 达梦数据库由数据库和实例构成&#xff1a; 数据库是指磁盘上存放的数据库文件的集合&#xff0c;包括参数文件、控制文件、数据文件、日志文件等。实例是指一组运行的数据库…

创意绘图画画小程序:融合白板黑板功能,开启绘画新纪元

创意绘图画画小程序&#xff1a;融合白板黑板功能&#xff0c;开启绘画新纪元 在数字化时代的浪潮下&#xff0c;艺术创作正逐渐摆脱传统形式的束缚&#xff0c;以更加多元、便捷的方式走进人们的生活。其中&#xff0c;创意绘图画画小程序以其独特的白板画、黑板画功能&#…

了解next.js框架特点,以及总结Next.js 常用的api和用法

Next.js 是一个流行的 React 框架,它提供了很多开箱即用的功能,如服务器渲染、静态导出、代码拆分等,让开发者可以更轻松地构建 React 应用。下面是对 Next.js 的深度解析,以及附带的代码实例。 1.Next.js 框架特点 1. 服务器渲染(Server-side Rendering,SSR) Next.j…

FANUC机器人仿真软件ROBOGUIDE通过备份文件创建工作单元的方法介绍

FANUC机器人仿真软件ROBOGUIDE通过备份文件创建工作单元的方法介绍 如下图所示,首先要确定你的机器人控制器的软件版本,具体可以在示教器上查看,如下图所示, 如下图所示,该机器人的控制器版本为V8.30P, 按照正确步骤对机器人进行备份操作,具体的流程可参考以下链接中的内…

代码随想录算法训练营第30天| 332.重新安排行程*、 51. N皇后*、 37. 解数独*

332.重新安排行程* 力扣题目链接 代码 示例代码 class Solution { private: // unordered_map<出发机场, map<到达机场, 航班次数>> targets unordered_map<string, map<string, int>> targets; bool backtracking(int ticketNum, vector<strin…

k8s 部署 canal 集群,RocketMQ 模式

k8s 部署 canal 集群&#xff0c;RocketMQ 模式 k8s 部署 canal 集群&#xff0c;RocketMQ 模式前提MySQLRocketMQ制作 canal-admin、canal-server 镜像 部署 zookeeper部署 canal-admin部署 canal-server测试 k8s 部署 canal 集群&#xff0c;RocketMQ 模式 前提 MySQL 开启…

vulnhub----natraj靶机

文章目录 一.信息收集1.网段探测2.端口扫描3.版本服务探测4.漏扫5.目录扫描 二.漏洞利用1.分析信息2..fuzz工具 三.getshell四.提权六.nmap提权 一.信息收集 1.网段探测 因为使用的是VMware&#xff0c;靶机的IP地址是192.168.9.84 ┌──(root㉿kali)-[~/kali/vulnhub] └─…

JVM-面试-4-连炮,你能顶住么?

1、JVM的内存区域是怎么划分的&#xff1f; JVM的内存划分中&#xff0c;有部分区域是线程私有的&#xff0c;有部分是属于整个JVM进程&#xff1b;有些区域会抛出OOM异常&#xff0c;有些则不会&#xff0c;了解JVM的内存区域划分以及特征&#xff0c;是定位线上内存问题的基础…

Lua 和 Love 2d 教程 二十一点朴克牌 (上篇lua源码)

GitCode - 开发者的代码家园 Lua版完整原码 规则 庄家和玩家各发两张牌。庄家的第一张牌对玩家是隐藏的。 玩家可以拿牌&#xff08;即拿另一张牌&#xff09;或 停牌&#xff08;即停止拿牌&#xff09;。 如果玩家手牌的总价值超过 21&#xff0c;那么他们就爆掉了。 面牌…

Django源码之路由的本质(上)——逐步剖析底层执行流程

目录 1. 前言 2. 路由定义 3. 路由定义整体源码分析 3.1 partial实现path函数调用 3.2 图解_path函数 3.3 最终 4.URLPattern和Pattern的简单解析 5. 小结 1. 前言 在学习Django框架的时候&#xff0c;我们大多时候都只会使用如何去开发项目&#xff0c;对其实现流程并…

【sqlite3】网络socket编程温度采集智能存储与上报项目技术------sqlite3数据库基础

项目源码&#xff1a;https://gitee.com/TJF865975/project1_ds18b20&#xff0c;此为本人gitee仓库&#xff0c;欢迎 Watch、Star、Fork。 1.sqlite3简介 SQLite3是一种轻量级的关系型数据库&#xff0c;可以在本地磁盘上存储数据。 2.sqlite3安装 sudo apt-get install s…

鸽哒言讯独家最新im即时通讯系统双端源码下载 (中越双语)带安卓未封装、苹果未封装、PC端(全开源)+部署教程

独家最新im即时通讯系统双端源码下载 &#xff08;中越双语&#xff09;带安卓未封装、苹果未封装、PC端&#xff08;全开源&#xff09;部署教程鸽哒IM即时通讯系统是一款类似于weixin的即时通讯软件&#xff0c;具有独立开发的特点。与网络其他聊天软件相比&#xff0c;即时聊…

文件同步工具哪个好

背景 今天介绍一款文件实时同步工具PanguFlow,它能够实时地监控源端文件夹的变化&#xff0c;然后将这种变化实时同步到目标端&#xff0c;对于文件灾备冗余的场景可谓是再合适不过了&#xff0c;一些老铁可能有这样的需求&#xff0c;比如两台服务器需要做文件的双机热备&…

【Python 进阶笔记1】__call__ 函数

1. 前言 __call__是Python中的一个特殊方法&#xff08;也称为魔法方法&#xff09;。当定义了这个方法后&#xff0c;这个类的实例&#xff08;对象&#xff09;可以像普通函数那样被调用。这意味着&#xff0c;如果你创建了一个该类的实例&#xff0c;你可以直接用括号传递参…