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

这篇具有很好参考价值的文章主要介绍了Sentinel dashboard的使用;Nacos保存Sentinel限流规则。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Sentinel dashboard的使用

往期文章

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

参考文档

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

限流结果

Sentinel dashboard的使用;Nacos保存Sentinel限流规则,Spring Cloud Alibaba,sentinel,spring cloud,spring boot

下载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

目录:
Sentinel dashboard的使用;Nacos保存Sentinel限流规则,Spring Cloud Alibaba,sentinel,spring cloud,spring boot

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 容灾中心的使用
Sentinel dashboard的使用;Nacos保存Sentinel限流规则,Spring Cloud Alibaba,sentinel,spring cloud,spring boot

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

不推荐的原因,客户端、服务端重启后规则不会保存
Sentinel dashboard的使用;Nacos保存Sentinel限流规则,Spring Cloud Alibaba,sentinel,spring cloud,spring boot
Sentinel dashboard的使用;Nacos保存Sentinel限流规则,Spring Cloud Alibaba,sentinel,spring cloud,spring boot

3. 限流效果:

Sentinel dashboard的使用;Nacos保存Sentinel限流规则,Spring Cloud Alibaba,sentinel,spring cloud,spring boot

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

Sentinel dashboard的使用;Nacos保存Sentinel限流规则,Spring Cloud Alibaba,sentinel,spring cloud,spring boot

[
	{
		"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。文章来源地址https://www.toymoban.com/news/detail-618559.html

/**
 * @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;
	}
}

到了这里,关于Sentinel dashboard的使用;Nacos保存Sentinel限流规则的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Sentinel-Dashboard-1.8持久化Nacos

    Sentinel-Dashboard-1.8持久化Nacos 一、客户端改造 1.引入pom.xml文件依赖 2.配置application.yml文件。 客户端改造完成 二、Sentinel-Dashboard源码改造 1.修改pom.xml中nacos的范围中【test】注释。 2.把test目录下com/alibaba/csp/sentinel/dashboard/rule下的nacos文件夹复制到main相同目录下 3.修改application.

    2024年02月04日
    浏览(35)
  • 【SpringCloud】11、Spring Cloud Gateway使用Sentinel实现服务限流

    1、关于 Sentinel Sentinel 是阿里巴巴开源的一个流量防卫防护组件,可以为微服务架构提供强大的流量防卫能力,包括流量控制、熔断降级等功能。Spring Cloud Gateway 与 Sentinel 结合,可以实现强大的限流功能。 Sentinel 具有以下特性: 丰富的应用场景:Sentinel 承接了阿里巴巴近

    2024年02月01日
    浏览(54)
  • sentinel规则持久化-规则同步nacos-最标准配置

    官方参考文档: 动态规则扩展 · alibaba/Sentinel Wiki · GitHub 需要修改的代码如下: 为了便于后续版本集成nacos,简单讲一下集成思路 1.更改pom 修改sentinel-datasource-nacos的范围 将 改为 2.拷贝示例 将test目录下的com.alibaba.csp.sentinel.dashboard.rule.nacos包下的内容拷贝到src的 com.alibaba.

    2024年02月07日
    浏览(42)
  • Sentinel 规则持久化到 Nacos

    Sentinel的控制台规则管理有三种模式: 原始模式:控制台配置的规则直接推送到Sentinel客户端,也就是我们的应用。然后保存在内存中,服务重启则丢失 pull模式:控制台将配置的规则推送到Sentinel客户端,而客户端会将配置规则保存在本地文件或数据库中。以后会定时去本地

    2024年02月16日
    浏览(47)
  • 【Linux】Centos 8 服务器部署:docker 安装 jdk、nginx、nacos、redis、Sentinel Dashboard

    目录 一、安装软件 (1)全部安装命令 (2)安装:jdk (3)安装:nginx  (4)安装:nacos (5)安装:redis (6)安装:Sentinel Dashboard 二、开放端口 三、启动软件  (1)启动:nacos (2)启动:nginx (3)启动:redis (4)启动:Sentinel Dashboard 四、访问网址  (1)访问:nacos 

    2024年02月06日
    浏览(61)
  • Sentinel + Nacos流控规则持久化配置

    json参数对映sentinel 规则面板      第二步,告诉订单服务读取配置,添加yml配置  

    2024年04月23日
    浏览(29)
  • Spring Cloud Gateway集成Sentinel 1.8.6及Sentinel Dashboard

    一、安装sentinel 1.下载地址:sentinel v1.8.6 2.启动sentinel dashboard,执行以下命令: java -Dcsp.sentinel.log.dir=D:xxxsentinellogs -Dserver.port=9217 -Dcsp.sentinel.dashboard.server=localhost:9217 -Dcsp.sentinel.heartbeat.client.ip=localhost -Dproject.name=sentinel-dashboard -Dsentinel.dashboard.auth.username=sentinel -Dsentinel.dashboar

    2024年02月11日
    浏览(48)
  • 【Spring Cloud Alibaba】限流--Sentinel

    随着微服务的流行,服务和服务之间的稳定性变得越来越重要。 Sentinel 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性。 Sentinel具有如下特性: 丰富的应用场景:承接了阿里巴巴近 10 年的双十一大促流量的核心场景,例如秒杀,可以实时

    2024年02月15日
    浏览(37)
  • Spring Alibaba Sentinel实现集群限流demo

    1.什么是单机限流? 小伙伴们或许遇到过下图这样的限流配置 又或者是这样的Nacos动态配置限流规则:  以上这些是什么限流?没错,就是单机限流,那么单机限流有什么弊端呢? 假设我们集群部署3台机器(NodeA/NodeB/NodeC),在某时刻,同时有25个请求进来,假设NodeA收到1

    2024年02月15日
    浏览(42)
  • Spring Cloud Gateway集成sentinel进行网关限流

    本文使用版本如下:

    2024年02月09日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包