当前位置: 首页 > news >正文

Sentinel dashboard的使用;Nacos保存Sentinel限流规则

Sentinel dashboard的使用

往期文章

  1. Nacos环境搭建
  2. Nacos注册中心的使用
  3. Nacos配置中心的使用
  4. Sentinel 容灾中心的使用

参考文档

Sentinel · alibaba/spring-cloud-alibaba Wiki · GitHub

限流结果

在这里插入图片描述

下载sentinel-dashboard

github地址:Sentinel/sentinel-dashboard at master · alibaba/Sentinel · GitHub

启动脚本

创建sentinel-dashboard的启动脚本,并添加如下信息:

java -jar -Dserver.port=8350 -Dcsp.sentinel.dashboard.server=localhost:8350 -Dproject.name=sentinel-dashboard --add-exports=java.base/sun.net.util=ALL-UNNAMED sentinel-dashboard-1.8.4.jar

目录:
在这里插入图片描述

Jar(客户端)

<!-- 一定要放在前面 -->
<!--Sentinel -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- sentinel-dashboard -->
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId>
</dependency>
<!--Spring Cloud Alibaba Nacos Discovery-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--Spring Cloud Alibaba Nacos Config-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--LoadBalancer-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

yml

注意:sentinel-dashboard默认会在8720端口接收注册服务的数据,所以dashboard使用的端口和接收数据的端口不要一样。

消费者

server:port: 8581
spring:application:name: nacos-consumercloud:nacos:config:group: DEFAULT_GROUPserver-addr: localhost:8848sentinel:transport:port: 8720dashboard: localhost:8350eager: trueconfig:import:# 父类配置要放在前面,相同的项会被后面的配置覆盖- optional:nacos:nacos-discovery.yaml
management:endpoints:web:exposure:include: '*'

nacos-discovery.yml

spring:cloud:nacos:discovery:server-addr: localhost:8848username: devilvanpassword: 741258963hjklfailure-tolerance-enabled: true

Sentinel Dashboard的使用

1. 关闭服务端硬编码的限流规则

服务端的代码参考:Sentinel 容灾中心的使用
在这里插入图片描述

2. 在dashboard中设置限流规则(不推荐)

不推荐的原因,客户端、服务端重启后规则不会保存
在这里插入图片描述
在这里插入图片描述

3. 限流效果:

在这里插入图片描述

Nacos配置并保存Sentinel限流规则

步骤

  1. 引入sentinel和sentinel dashboard相关依赖
  2. 服务端给对应controller添加@SentinelResource注解,并定义一个限流/熔断处理类负责处理该resource的限流/熔断逻辑(注:方法必须有static修饰)。
  3. Nacos配置中心保存sentinel resource的配置信息,即限流规则

Jar(服务端)

<!-- 一定要放在前面 -->
<!--Sentinel -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!-- SpringCloud Alibaba CircuitBreaker Sentinel-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-circuitbreaker-sentinel</artifactId>
</dependency>
<!-- sentinel-dashboard -->
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-transport-simple-http</artifactId>
</dependency>
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-datasource-nacos</artifactId><version>${sentinel-version}</version>
</dependency>
<dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-spring-webmvc-adapter</artifactId><version>${sentinel-version}</version>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<!--Spring Cloud Alibaba Nacos Discovery-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!--Spring Cloud Alibaba Nacos Config-->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

yml(服务端)

server:port: 8481
spring:application:name: nacos-providercloud:nacos:config:group: DEFAULT_GROUPserver-addr: localhost:8848discovery:server-addr: localhost:8848username: devilvanpassword: 741258963hjklsentinel:transport:port: 8720dashboard: localhost:8350eager: truedatasource:echo:nacos:server-add: ${spring.cloud.nacos.config.server-addr}groupId: ${spring.cloud.nacos.config.group}dataId: ${spring.application.name}-rulesrule-type: flowdata-type: jsonconfig:import:# 父类配置要放在前面,相同的项会被后面的配置覆盖- optional:nacos:nacos-discovery.yaml
management:endpoints:web:exposure:include: '*'

Nacos配置并保存Sentinel限流规则

1. Nacos配置中心添加配置文件

注:建议单独起resource的名字,不要将路由信息当做resource

在这里插入图片描述

[{"resource": "echo","limitApp": "default","grade": 1,"count": 1,"strategy": 0,"controlBehavior": 0,"clusterMode": false},{"resource": "echo2","limitApp": "default","grade": 1,"count": 1,"strategy": 0,"controlBehavior": 0,"clusterMode": false}
]

2. 服务端后台代码

注意:echo2()方法是通过代码层面的try catch来进行限流/熔断的,在nacos配置中定义的echo2的resource不能在该处添加@SentinelResource注解

/*** @Description Nacos生产者 控制层*/
@RestController
@RequestMapping(value = "nacosProviderController")
public class NacosProviderController {@Resource(name = "nacosProviderServiceImpl")private NacosProviderService nacosProviderService;@GetMapping(value = "/echo/{str}")@SentinelResource(value = "echo", fallback = "echoFallback", fallbackClass = EchoFallback.class,blockHandler = "echoBlockHandler", blockHandlerClass = EchoFallback.class)public ResultMessage<String> echo(@PathVariable String str) {return nacosProviderService.echo(str);}@GetMapping(value = "/echo2/{str}")public ResultMessage<String> echo2(@PathVariable String str) {return nacosProviderService.echo2(str);}
}

3. 限流/熔断处理类

注意:该类中的限流/熔断方法必须static修饰

/*** @Description echo方法 异常回调类*/
public class EchoFallback {/*** 遇到异常走的逻辑** @param str 原方法的参数* @param e   异常信息* @return 异常回调方法返回值,和原方法返回值一致*/public static ResultMessage<String> echoFallback(String str, Throwable e) {ResultMessage<String> resultMessage = new ResultMessage<>();String message = "熔断-echo方法调用异常,str: " + str + "\n" + e;resultMessage.setMessage(message);return resultMessage;}/*** 方法限流逻辑** @param str 原方法的参数* @param e   异常信息* @return 限流回调方法返回值,和原方法返回值一致*/public static ResultMessage<String> echoBlockHandler(String str, BlockException e) {ResultMessage<String> resultMessage = new ResultMessage<>();String message = "限流-echo方法进行 限流,str: " + str + "\n" + e;resultMessage.setMessage(message);return resultMessage;}
}

4. 生产者业务逻辑代码

注:echo2()方法中使用的是sentinel的api实现限流,高亮的部分需要指定配置文件中已存在,或在代码中定义限流规则的resource,即"echo2"资源需要对应上方Nacos配置文件中的resource。

/*** @Description Nacos生产者 业务逻辑实现类*/
@Service
public class NacosProviderServiceImpl implements NacosProviderService {/*** 测试限流/熔断的方法** @param str 原方法的参数* @return 回调*/@Overridepublic ResultMessage<String> echo(String str) {ResultMessage<String> resultMessage = new ResultMessage<>();if ("devilvan".equals(str)) {String msg = "Hello Nacos Discovery " + str;resultMessage.setMessage(msg);} else {throw new RuntimeException();}return resultMessage;}/*** 测试sentinel设置资源并使用的方法** @param str 入参字符串* @return 回调*/@Overridepublic ResultMessage<String> echo2(String str) {String resource = "echo2";ResultMessage<String> resultMessage = new ResultMessage<>();Entry entry = null;try {entry = SphU.entry(resource);if ("devilvan".equals(str)) {String msg = "Hello Nacos Discovery " + str;resultMessage.setMessage(msg);} else {throw new RuntimeException();}} catch (BlockException e) {String msg = "限流-echo2方法调用异常,str: " + str + "\n" + e;resultMessage.setMessage(msg);} catch (Exception e) {String msg = "熔断-echo2方法调用异常,str: " + str + "\n" + e;resultMessage.setMessage(msg);} finally {if (entry != null) {entry.exit();}}return resultMessage;}
}

相关文章:

Sentinel dashboard的使用;Nacos保存Sentinel限流规则

Sentinel dashboard的使用 往期文章 Nacos环境搭建Nacos注册中心的使用Nacos配置中心的使用Sentinel 容灾中心的使用 参考文档 Sentinel alibaba/spring-cloud-alibaba Wiki GitHub 限流结果 下载sentinel-dashboard github地址&#xff1a;Sentinel/sentinel-dashboar…...

vue学习之插值表达式{{}}与显示数据(v-text和v-html)

1. 记得导入 <!-- 在线导入 --> <!-- 开发环境版本&#xff0c;包含了用帮助的命令行警告 --> <script src"https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <!-- 生产环境版本&#xff0c;优化了尺寸和速度 --> <scri…...

2,认识N(logN)的排序【p3】

认识N( logN} 的排序 2.1归并排序2.1.1代码实现归并排序2.1.1.1自己c实现归并排序2.1.1.2gptc实现归并排序2.1.1.3总结2.1.1.4比较行为 2.1.2归并排序使用master公式2.1.3归并排序的扩展2.1.3.1小和问题2.1.3.2逆序对问题 2.2快排、荷兰国旗问题2.2.1问题一2.2.2问题二(荷兰国旗…...

华为机考--服务失效判断--带答案

新2023年华为OD真题机考题库大全-带答案&#xff08;持续更新)or2023华为OD统一考试&#xff08;AB卷&#xff09;题库清单-带答案&#xff08;持续更新&#xff09; 题目描述 某系统中有众多服务&#xff0c;每个服务用字符串&#xff08;只包含字母和数字&#xff0c;长度<…...

C++对C的加强(全)

目录 C对C的加强 命名空间 为什么要使用命名空间 怎么使用命名空间 命名空间的定义 命名空间的使用 使用域解析符 :: 使用using声明 内联命名空间 嵌套命名空间 随时将新的成员加入命名空间 命名空间中 函数的声明和实现分开 无名命名空间 命名空间取别名 使用u…...

ES6及以上新特性

ES6&#xff08;ECMAScript 2015&#xff09;及以上版本引入了许多新特性&#xff0c;每个版本都有不同的增强和改进。以下是 ES6 及以上版本的新特性的详细描述&#xff1a; ES6&#xff08;ECMAScript 2015&#xff09;&#xff1a; let 和 const 声明&#xff1a;引入块级作…...

伦敦金在非农双向挂单

对伦敦金投资有一定经验的投资者都知道&#xff0c;在非农时期&#xff0c;伦敦金市场会出现很大的波动&#xff0c;那么我们如何才能抓住这些波动呢&#xff1f;答案是很难的。但是&#xff0c;有些投资者在多年实践中发明了一种双向挂单的方法&#xff0c;这里和大家一切分享…...

【C语言】—— __attribute__((fallthrough))

__attribute__((fallthrough)) 是一个在编译器中使用的特性&#xff0c;用于指示在 switch 语句中的 case 标签中故意省略 break 语句时的意图。它告诉编译器&#xff0c;故意省略 break 是有意为之&#xff0c;而不是出现了错误或遗漏。 当使用 switch 语句时&#xff0c;通常…...

【深度学习】生成对抗网络Generative Adversarial Nets

序言 本文是GAN网络的原始论文&#xff0c;发表于2014年&#xff0c;我们知道&#xff0c;对抗网络是深度学习中&#xff0c;CNN基础上的一大进步&#xff1b; 它最大的好处是&#xff0c;让网络摆脱训练成“死模型”到固定场所处去应用&#xff0c;而是对于变化的场景&#xf…...

【深度学习】从现代C++中的开始:卷积

一、说明 在上一个故事中&#xff0c;我们介绍了机器学习的一些最相关的编码方面&#xff0c;例如 functional 规划、矢量化和线性代数规划。 本文&#xff0c;让我们通过使用 2D 卷积实现实际编码深度学习模型来开始我们的道路。让我们开始吧。 二、关于本系列 我们将学习如何…...

金融数学方法:蒙特卡洛模拟

1.方法介绍 蒙特卡洛模拟是一种基于概率和统计的数值计算方法&#xff0c;用于解决各种复杂问题。它以概率统计为基础&#xff0c;通过随机抽样和重复实验的方式进行模拟&#xff0c;从而得到问题的近似解。它的基本思想是通过大量的随机样本来近似计算问题的解&#xf…...

vue 文件扩展名中 esm 、common 、global 以及 mini 、 dev 、prod 、runtime 的含义

vue 文件扩展名中 esm 、common 、global 以及 mini 、 dev 、prod 、runtime 的含义 vue.js 直接用在 script 标签中的完整版本&#xff08;同时包含编译器 compiler 和运行时 runtime&#xff09;&#xff0c;可以看到源码&#xff0c;适用于开发环境。 这个版本视图可以写在…...

微服务契约测试框架Pact-Python实战

Pact是一个契约测试框架&#xff0c;有多种语言实现&#xff0c;本文以基于pact-python探究契约测试到底是什么&#xff1f;以及如何实现 官网&#xff1a;自述文件 |契约文档 (pact.io) 契约测试步骤 1、为消费者写一个单元测试&#xff0c;让它通过&#xff0c;并生成契约…...

Linux 给用户 赋某个文件夹操作的权限(实现三权分立)

Linux 给用户 赋某个文件夹操作的权限 这里用的ubuntu16.04 一、配置网站管理员 linux文件或目录的权限分为&#xff0c;读、写、可执行三种权限。文件访问的用户类别分为&#xff0c;文件创建者、与文件创建者同组的用户、其他用户三类。 添加用户 useradd -d /var/www/htm…...

【C++入门到精通】C++入门 —— 类和对象(初始化列表、Static成员、友元、内部类、匿名对象)

目录 一、初始化列表 ⭕初始化列表概念 ⭕初始化列表的优点 ⭕使用场景 ⭕explicit关键字 二、Static成员 ⭕Static成员概念 &#x1f534;静态数据成员&#xff1a; &#x1f534;静态函数成员&#xff1a; ⭕使用静态成员的优点 ⭕使用静态成员的注意事项 三、友…...

“深入理解Spring Boot:从入门到高级应用“

标题&#xff1a;深入理解Spring Boot&#xff1a;从入门到高级应用 摘要&#xff1a;本文将介绍Spring Boot的基本概念、原理和使用方法&#xff0c;并探讨如何在实际开发中充分发挥Spring Boot的优势。通过详细的示例代码&#xff0c;读者将能够深入理解Spring Boot的各个方…...

Apache Spark 的基本概念和在大数据分析中的应用

Apache Spark是一种快速、通用、可扩展的大数据处理引擎&#xff0c;用于大规模数据处理任务&#xff0c;如批处理、交互式查询、实时流处理、机器学习和图形处理等。它的主要特点包括&#xff1a; 1. 速度&#xff1a;Spark使用In-Memory计算技术&#xff0c;将计算结果存储在…...

Debian LNMP架构的简单配置使用

一、LNMP简介 LinuxNginxMysqlPHP组成的网站架构&#xff0c;常用于中小型网站服务。 二、环境 Debian 6.1.27-1kali1 (2023-05-12) Nginx/1.22.1 10.11.2-MariaDB&#xff08;mysql&#xff09; PHP 8.2.7 &#xff08;Debian 6.1.27包含以上包&#xff0c;直接使用即…...

CAN转EtherNet/IP网关can协议破解服务

JM-EIP-CAN 是自主研发的一款 ETHERNET/IP 从站功能的通讯网关。该产品主要功能是将各种 CAN 总线和 ETHERNET/IP 网络连接起来。 本网关连接到 ETHERNET/IP 总线中做为从站使用&#xff0c;连接到 CAN 总线中根据节点号进行读写。 技术参数 ETHERNET/IP 技术参数 网关做为 …...

最适合新手的Java项目/SpringBoot+SSM项目《苍穹外卖》/项目实战、笔记(超详细、新手)[持续更新……]

小知识 软件设计中提到的UI设计中的UI是什么意思&#xff1f; 在软件设计中&#xff0c;UI设计中的UI是User Interface的简称&#xff0c;即用户界面。UI设计是指对软件的人机交互、操作逻辑、界面美观的整体设计。好的UI设计可以让软件变得有个性有品位&#xff0c;同时让操作…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密

在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

脑机新手指南(七):OpenBCI_GUI:从环境搭建到数据可视化(上)

一、OpenBCI_GUI 项目概述 &#xff08;一&#xff09;项目背景与目标 OpenBCI 是一个开源的脑电信号采集硬件平台&#xff0c;其配套的 OpenBCI_GUI 则是专为该硬件设计的图形化界面工具。对于研究人员、开发者和学生而言&#xff0c;首次接触 OpenBCI 设备时&#xff0c;往…...

Unity中的transform.up

2025年6月8日&#xff0c;周日下午 在Unity中&#xff0c;transform.up是Transform组件的一个属性&#xff0c;表示游戏对象在世界空间中的“上”方向&#xff08;Y轴正方向&#xff09;&#xff0c;且会随对象旋转动态变化。以下是关键点解析&#xff1a; 基本定义 transfor…...

【Kafka】Kafka从入门到实战:构建高吞吐量分布式消息系统

Kafka从入门到实战:构建高吞吐量分布式消息系统 一、Kafka概述 Apache Kafka是一个分布式流处理平台,最初由LinkedIn开发,后成为Apache顶级项目。它被设计用于高吞吐量、低延迟的消息处理,能够处理来自多个生产者的海量数据,并将这些数据实时传递给消费者。 Kafka核心特…...

字符串哈希+KMP

P10468 兔子与兔子 #include<bits/stdc.h> using namespace std; typedef unsigned long long ull; const int N 1000010; ull a[N], pw[N]; int n; ull gethash(int l, int r){return a[r] - a[l - 1] * pw[r - l 1]; } signed main(){ios::sync_with_stdio(false), …...

Docker、Wsl 打包迁移环境

电脑需要开启wsl2 可以使用wsl -v 查看当前的版本 wsl -v WSL 版本&#xff1a; 2.2.4.0 内核版本&#xff1a; 5.15.153.1-2 WSLg 版本&#xff1a; 1.0.61 MSRDC 版本&#xff1a; 1.2.5326 Direct3D 版本&#xff1a; 1.611.1-81528511 DXCore 版本&#xff1a; 10.0.2609…...

基于谷歌ADK的 智能产品推荐系统(2): 模块功能详解

在我的上一篇博客&#xff1a;基于谷歌ADK的 智能产品推荐系统(1): 功能简介-CSDN博客 中我们介绍了个性化购物 Agent 项目&#xff0c;该项目展示了一个强大的框架&#xff0c;旨在模拟和实现在线购物环境中的智能导购。它不仅仅是一个简单的聊天机器人&#xff0c;更是一个集…...