Java之SpringCloudAlibaba Sentinel组件案例讲解
概述
Sentinel是阿里巴巴开源的一款服务保护框架,可以通过限流、熔断降级、系统负载保护等手段保护应用服务不受影响,进而提升应用可用性、稳定性和安全性。本篇文章将讲解使用SpringCloudAlibaba集成Sentinel组件的案例,包括Sentinel Dashboard的使用和基于Sentinel的多种服务保护策略实现。
准备工作
- JDK 1.8
- Maven 3.0+
- Spring Boot 2.x
- Spring Cloud Alibaba 2.1.0
- Sentinel 1.7.0
实现步骤
步骤一:引入依赖
首先,在pom.xml文件中添加以下依赖:
<!--Spring Cloud Alibaba Sentinel-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<!--Spring Cloud Alibaba Nacos-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
步骤二:配置文件
在application.yml文件中添加以下配置:
# Sentinel配置
spring:
cloud:
sentinel:
eager: true
transport:
dashboard: localhost:8080
其中eager属性为true表示开启了Sentinel初始化时的eager模式,transport.dashboard指定了Sentinel Dashboard的地址。
步骤三:创建服务
创建一个服务,用来测试Sentinel的限流、熔断降级、系统负载保护等功能。
步骤四:添加限流规则
在Sentinel的Dashboard中添加限流规则,可以在Dashboard中选择对应的服务,然后点击'flow',在'Rules'面板中添加限流规则。
步骤五:添加熔断降级规则
在Sentinel的Dashboard中添加熔断降级规则,可以在Dashboard中选择对应的服务,然后点击熔断降级,在'Rules'面板中添加熔断降级规则。
步骤六:添加系统负载保护规则
在Sentinel的Dashboard中添加系统负载保护规则,可以在Dashboard中选择对应的服务,然后点击系统负载保护,在'Rules'面板中添加系统负载保护规则。
示例一:基于Sentinel的限流
步骤一:创建工程
首先,创建一个名为'spring-cloud-client'的工程。
步骤二:添加依赖
在pom.xml文件中添加以下依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
步骤三:添加配置
在application.yml文件中添加以下配置:
server:
port: 8081
spring:
application:
name: spring-cloud-client
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
namespace: 2fea6b37-5a9a-4eba-ac4d-e94d4d517ccd
group: DEFAULT_GROUP
# Sentinel配置
spring:
cloud:
sentinel:
eager: true
transport:
dashboard: localhost:8080
# 测试服务
test-service:
limit:
qps: 5 #每秒钟只允许5个请求访问
fallback:
enabled: true #开启熔断降级fallback
步骤四:创建Controller
在工程中创建名为'TestController'的Controller,代码如下:
@RestController
public class TestController {
@GetMapping("/test")
@SentinelResource(value = "test", blockHandlerClass = ExceptionUtil.class, blockHandler = "handleBlock")
public String test() throws InterruptedException {
Thread.sleep(1000);
return "hello sentinel!";
}
}
其中,使用注解'@SentinelResource'指定了资源名称为'test',同时指定了BlockHandler类为'ExceptionUtil',BlockHandler方法名称为'handleBlock'。
步骤五:添加限流规则
在Sentinel的Dashboard中添加限流规则。
步骤六:启动服务
启动服务,然后在浏览器中输入'localhost:8081/test'访问该服务,可以看到结果会在1秒钟后才返回。当访问次数超过限制时,就会触发Sentinel的限流策略,阻止请求访问。
示例二:基于Sentinel的熔断降级
步骤一:创建工程
首先,创建一个名为'spring-cloud-server'的工程。
步骤二:添加依赖
在pom.xml文件中添加以下依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.retry</groupId>
<artifactId>spring-retry</artifactId>
</dependency>
其中,添加了'spring-retry'依赖,用于在熔断恢复时进行重试。
步骤三:添加配置
在application.yml文件中添加以下配置:
server:
port: 8080
spring:
application:
name: spring-cloud-server
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
namespace: 2fea6b37-5a9a-4eba-ac4d-e94d4d517ccd
group: DEFAULT_GROUP
# Sentinel配置
spring:
cloud:
sentinel:
eager: true
transport:
dashboard: localhost:8080
# 测试服务
test-service:
fallback:
enabled: true #开启熔断降级fallback
fallbackUri: forward:/testFallback #熔断降级后转发请求的地址
circuitBreaker:
enabled: true
requestVolumeThreshold: 4 #触发熔断的最小请求数量
sleepWindowInMilliseconds: 10000 #熔断器开启的时间(ms)
errorThresholdPercentage: 40 #错误率百分比
步骤四:创建Controller
在工程中创建名为'TestController'的Controller,代码如下:
@RestController
public class TestController {
@GetMapping("/test")
public String test() {
throw new RuntimeException("error!");
}
@GetMapping("/testFallback")
public String testFallback() {
return "fallback!";
}
}
其中,'test'接口会抛出异常,然后Sentinel会触发熔断降级策略,转发请求到'testFallback'接口。
步骤五:添加熔断降级规则
在Sentinel的Dashboard中添加熔断降级规则。
步骤六:启动服务
启动服务,然后在浏览器中输入'localhost:8080/test'访问该服务,可以看到结果会返回'fallback!',而不是抛出异常信息。当访问次数超过限制时,就会触发Sentinel的熔断降级策略,转发请求到'testFallback'接口。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Java之SpringCloudAlibaba Sentinel组件案例讲解 - Python技术站