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-consumer
  cloud:
	nacos:
	  config:
		group: DEFAULT_GROUP
		server-addr: localhost:8848
	sentinel:
	  transport:
		port: 8720
		dashboard: localhost:8350
	  eager: true
  config:
	import:
	  # 父类配置要放在前面,相同的项会被后面的配置覆盖
	  - optional:nacos:nacos-discovery.yaml
management:
  endpoints:
	web:
	  exposure:
		include: '*'

nacos-discovery.yml

spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
        username: devilvan
        password: 741258963hjkl
        failure-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-provider
  cloud:
	nacos:
	  config:
		group: DEFAULT_GROUP
		server-addr: localhost:8848
	  discovery:
		server-addr: localhost:8848
		username: devilvan
		password: 741258963hjkl
	sentinel:
	  transport:
		port: 8720
		dashboard: localhost:8350
	  eager: true
	  datasource:
		echo:
		  nacos:
			server-add: ${spring.cloud.nacos.config.server-addr}
			groupId: ${spring.cloud.nacos.config.group}
			dataId: ${spring.application.name}-rules
			rule-type: flow
			data-type: json
  config:
	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 回调
	 */
	@Override
	public 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 回调
	 */
	@Override
	public 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;
	}
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot的三层架构以及IOCDI

目录 一、IOC&DI入门 二、三层架构 数据库访问层 业务逻辑层 控制层 一、IOC&DI入门 在软件开发中&#xff0c;IOC&#xff08;Inversion of Control&#xff09;和DI&#xff08;Dependency Injection&#xff09;是密切相关的概念。 IOC&#xff08;控制反转&a…

【腾讯云 Cloud Studio 实战训练营】全新的开发方式,让你实现一站式开发

一、前言 关于 Cloud Studio 全在线云端开发 用户只需要浏览器就可以访问和使用Cloud Studio,无需在本地配置开发环境。Cloud Studio将开发环境部署在云服务器上,用户可以随时随地进行开发。多语言支持 Cloud Studio支持常见的开发语言,如Node.js、Python、Java、PHP等。用户…

Arcgis画等高线

目录 数据准备绘制等高线3D等高线今天我们将学习如何在ArcGIS中绘制等高线地图。等高线地图是地理信息系统中常见的数据表现形式,它通过等高线将地形起伏展现得一目了然,不仅美观,还能提供重要的地形信息。 数据准备 在开始之前,确保已经准备好了高程数据,它通常以栅格数…

11、PHP面向对象1

1、PHP的面向对象与其他语言类似&#xff0c;但也有不同。 PHP访问成员变量时&#xff0c;需要用“->”&#xff0c;而不能用“.”&#xff0c;访问成员函数时&#xff0c;需要用“->”&#xff0c;而不能用“.”。操作符“::”可以在没有任何声明实例的情况下访问类中的…

使用LangChain构建问答聊天机器人案例实战(二)

使用LangChain构建问答聊天机器人案例实战 逐行解读和验证全生命周期Prompting 现在我们使用GPT-4作为语言模型的驱动力,这个模型将成为整个应用程序的引擎,驱动整个应用程序运行,同时,应用程序也是基于Cpython去实现的,如图14-8所示,Pyodide是CPython到WebAssembly/Emsc…

jmeter实现webservice接口测试

其实可以用jmeter两种sampler进行webservice的测试&#xff1a; 1、SOAP/XML-RPC Request(但是在jmeter3.2以后版本中已经取消了这个取样器) 2、HTTP请求 下面分别介绍两种方式 一、首先需要使用soupUI工具抓取webservice接口的部分需要的信息。 1、新建项目 2、新建成功的…

htmlCSS-----定位

目录 前言 定位 分类和取值 定位的取值 1.相对定位 2.绝对位置 元素居中操作 3.固定定位 前言 今天我们来学习html&CSS中的元素的定位&#xff0c;通过元素的定位我们可以去更好的将盒子放到我们想要的位置&#xff0c;下面就一起来看看吧&#xff01; 定位 定位posi…

pytorch(续周报(1))

文章目录 2.1 张量2.1.1 简介2.1.2 创建tensor2.1.3 张量的操作2.1.4 广播机制 2.2 自动求导Autograd简介2.2.1 梯度 2.3 并行计算简介2.3.1 为什么要做并行计算2.3.2 为什么需要CUDA2.3.3 常见的并行的方法&#xff1a;网络结构分布到不同的设备中(Network partitioning)同一层…

【Linux多线程】详解线程控制、线程分离

线程互斥与同步 &#x1f478; 理解线程&#x1f934;pthead_t&#x1f977;关于线程&#x1f9b8;‍♀️线程控制POSIX线程库线程ID及进程地址空间布局 &#x1f9b8;线程分离__thread关键字&#x1f9b8;‍♂️pthread_detach函数&#x1f9b9;‍♀️pthread_exit函数&#x…

RNN架构解析——传统RNN模型

目录 传统RNN的内部结构图使用RNN优点和缺点 传统RNN的内部结构图 使用RNN rnnnn.RNN(5,6,1) #第一个参数是输入张量x的维度&#xff0c;第二个是隐藏层维度&#xff0c;第三层是隐藏层的层数 input1torch.randn(1,3,5) #第一个是输入序列的长度&#xff0c;第二个是批次的样本…

网络层IP协议的基本原理 数据链路层ARP协议 域名解析以及一些重要技术

目录 1 网络层IP协议协议头格式网段划分DHCPCIDR&#xff1a;基于子网掩码的划分方式特殊的IP号IP地址的数量限制私有IP地址和公网IP地址路由路由表 2 数据链路层 — 局域网的转发问题以太网认识以太网以太网帧格式局域网通信原理 MTUMTU对IP协议的影响MTU对UDP协议的影响MTU对…

自动化测试——APP测试

一、环境配置 1、安装jdk 配置环境变量 2、Android SDK 环境安装 3、Appium Server安装 4、模拟器安装 5、安装appium-python-client Python第三方库 二、APP自动化测试原理 三、Desired Capabilites——APPium自动化配置项 1、设置参数 2、操作系统 3、选择版本 4、设备名称…

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

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

选择器jQuery

诚信是你价格不菲的鞋子&#xff0c;踏遍千山万水&#xff0c;质量也应永恒不变。 jQuery选择器大全总结&#xff1a; jQuery选择器是一种用于在HTML文档中选择元素的强大工具。下面是一些常用的jQuery选择器的总结&#xff1a; 基本选择器&#xff1a; 元素选择器&#xff1a…

HarmonyOS/OpenHarmony元服务开发-卡片使用动效能力

ArkTS卡片开放了使用动画效果的能力&#xff0c;支持显式动画、属性动画、组件内转场能力。需要注意的是&#xff0c;ArkTS卡片使用动画效果时具有以下限制&#xff1a; 以下示例代码实现了按钮旋转的动画效果&#xff1a; Entry Component struct AttrAnimationExample { St…

生命在于学习——APP渗透学习笔记

一、app渗透篇 1、Android 简介 自从 Android 被谷歌收购&#xff08;2005 年&#xff09;&#xff0c;谷歌已经完成了整个开发&#xff0c;在过去的 9 年里&#xff0c;尤其是在安全方面&#xff0c;有很多变化。 现在&#xff0c;它是世界上最广泛使用的智能手机平台&#…

PHP使用Redis实战实录4:单例模式和面向过程操作redis的语法

PHP使用Redis实战实录系列 PHP使用Redis实战实录1&#xff1a;宝塔环境搭建、6379端口配置、Redis服务启动失败解决方案PHP使用Redis实战实录2&#xff1a;Redis扩展方法和PHP连接Redis的多种方案PHP使用Redis实战实录3&#xff1a;数据类型比较、大小限制和性能扩展PHP使用Re…

IT技术面试必备:如何做好IT类技术面试?

博主 默语带您 Go to New World. ✍ 个人主页—— 默语 的博客&#x1f466;&#x1f3fb; 《java 面试题大全》 &#x1f369;惟余辈才疏学浅&#xff0c;临摹之作或有不妥之处&#xff0c;还请读者海涵指正。☕&#x1f36d; 《MYSQL从入门到精通》数据库是开发者必会基础之…

tinkerCAD案例:25. 量角器 - 测量角度

tinkerCAD案例&#xff1a;25. 量角器 - 测量角度 原文 Now we’re going to make a protractor! A Protractor is one of the most basic, but essential, tools for making measurements. It is, then, surprising that the modern protractor is barely over 200 years ol…

神经网络简单介绍

人工神经网络(artififial neural network) 简称神经网络&#xff0c;它是一种模仿生物神经网络结构和功能的非线性数学模型。 神经网络通过输入层接受原始特征信息&#xff0c;再通过隐藏层进行特征信息的加工和提取&#xff0c;最后通过输出层输出结果。 根据需要神经网络可以…
最新文章