废话不多说,直接上代码,首先看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之内,都会被流控了,
这是开始入门,后续在接着研究。
本文详细介绍了如何在Spring Boot项目中集成和配置阿里巴巴Sentinel,包括设置dashboard连接、创建自定义流控和降级处理,以及如何在sentinel-dashboard上管理和应用规则。
1万+

被折叠的 条评论
为什么被折叠?



