springboot sentinel使用示例(基于sentinel 1.8),流控,降级,sentinel-dashboard使用,blockHandler和fallback
Posted Leo Han
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了springboot sentinel使用示例(基于sentinel 1.8),流控,降级,sentinel-dashboard使用,blockHandler和fallback相关的知识,希望对你有一定的参考价值。
废话不多说,直接上代码,首先看pom依赖:
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.3.12.RELEASE</version>
</dependency>
</dependencies>
项目配置application.properties
配置如下:
spring.application.name=sentinel-test-001
server.port=8080
spring.cloud.sentinel.transport.dashboard=localhost:8081
spring.cloud.sentinel.transport.port=8791
这是你自己项目需要用的,但是在启动项目之前,先得把sentinel-dashboard项目启动起来,可以从github直接下载sentinel源码下来自己编译启动sentinel源码位置 或者下载sentinel-dashboard发型版sentinel发行版list
因为我们自己项目中使用sentinel会向sentinel-dashboard注册相关信息,可以在sentinel-dashboard对相关的服务、接口进行流控、降级设置。sentinel-dashboard也是一个springboot项目
需要注意的是这里面有两个地方需要配置注意一下:
spring.cloud.sentinel.transport.dashboard=localhost:8081
这个是sentinel-dashboard的访问位置,其中端口号可以在sentinel-dashboard指定,如果是发行版的jar包,可以在启动jar的时候加入server.port
参数,指定自己需要的端口号。
spring.cloud.sentinel.transport.port=8791
这个是sentinel-dashboard和你自己项目通信的端口,sentinel-dashboard会通过HTTP访问你自己项目的这个端口号进行相关配置的推送。
因此,这里可以看出, sentinel-dashboard是需要双方相互通信的,需要确保二者的IP都能够互相访问到。
将sentinel-dashboard启动好之后,通过localhost:8081
(我这里指定sentinel-dashboard的端口号为8081了,默认如果不改的话就是8080),默认用户名和密码都是sentinel
,刚开始我们没有启动访问自己的项目,是没有任何东西的,
我们启动自己的项目,项目就一个controller:
@SpringBootApplication
public class Bootstrap
public static void main(String[] args)
SpringApplication.run(Bootstrap.class);
@RestController
@RequestMapping("/test")
public class TestController
@GetMapping("/sayHello")
public String sayHello(String name )
return "Hello World "+name;
启动项目,访问localhost:8080/test/sayHello?name=test,这时候在看sentinel-dashboard页面的时候出现了自己的项目,
查看实时监控:
查看簇点链路
:
这时候我们对刚才访问的接口进行流控设置:
这时候查看流控规则,就有了我们刚才添加的规则:
这时候在访问刚才的接口,连续刷,就出现了如下的界面:
blockHandler
这是Sentinel默认的流控和返回,但是很多时候我们需要自己设定自己需要的返回内容,这时候需要使用SentinelResource
自定义流控返回:
@RestController
@RequestMapping("/test")
public class TestController
@GetMapping("/sayHello")
@SentinelResource(value = "testSayHello",blockHandler = "blockHandler")
public String sayHello(String name )
return "Hello World "+name;
public String blockHandler(String name,BlockException e)
e.printStackTrace();
return "Blocked "+name;
这时候在访问接口,然后在sentinel-dashboard页面上显示如下:
定义流控规则如下:
然后在刷新接口,返回如下:
这时候返回的就是我们刚才定义的返回内容,另外这里blockHandler
对应的方法应该和被流控的方法参数一样,并且参数列表最后,多一个BlockException
参数。
fallback
blockHandler定义了流控触发后的处理逻辑,fallback则是当接口发生错误异常后会触发的逻辑:
@RestController
@RequestMapping("/test")
public class TestController
private AtomicInteger count = new AtomicInteger();
@GetMapping("/sayHello")
@SentinelResource(value = "testSayHello",blockHandler = "blockHandler",fallback = "fallback")
public String sayHello(String name )
if(count.incrementAndGet() % 2 == 0 )
throw new RuntimeException("error");
return "Hello World "+name;
public String blockHandler(String name,BlockException e)
e.printStackTrace();
return "Blocked "+name;
public String fallback(String name,Throwable e)
e.printStackTrace();
return "Fallback "+name;
触发异常后,响应如下:
这时候,就可以定义降级规则了:
当在1s内触发了两次异常之后,在30s之内,都会被流控了,
这是开始入门,后续在接着研究。
以上是关于springboot sentinel使用示例(基于sentinel 1.8),流控,降级,sentinel-dashboard使用,blockHandler和fallback的主要内容,如果未能解决你的问题,请参考以下文章
springboot+shiro-redis 使用Redis sentinel(哨兵)主从实现
springboot(十五):springboot+jpa+thymeleaf增删改查示例
Java之 Spring Cloud 微服务搭建Sentinel (第二个阶段)SpringBoot项目实现商品服务器端是调用