如其名所示,Resilience4j是一款轻量级稳定性框架。使用方便,与springboot集成非常顺滑,大有取代原来该领域大佬hystrix的架势。今天我们一起来学习一下Resilience4j的流控模块RateLimiter。
Maven
增加以下内容:
<properties>
<resilience4jVersion>1.7.0</resilience4jVersion>
</properties>
<dependencies>
<!-- resilience4j -->
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-ratelimiter</artifactId>
<version>${resilience4jVersion}</version>
</dependency>
<dependency>
<groupId>io.github.resilience4j</groupId>
<artifactId>resilience4j-spring-boot2</artifactId>
<version>${resilience4jVersion}</version>
</dependency>
<!-- 想使用resilience4j的注解功能,需要引入aop -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
</dependencies>
通过注解使用Ratelimiter:
配置文件
application.yml
resilience4j.ratelimiter:
configs:
default:
# 开启健康监控
registerHealthIndicator: false
#每1秒限流10个
limitForPeriod: 10
limitRefreshPeriod: 1s
#被阻塞的线程最长等待时间,等待超时会报异常
timeoutDuration: 1000
#被阻塞的最大线程数量,超过该数量会拒绝
eventConsumerBufferSize: 100
instances:
backendA:
baseConfig: default #使用默认配置
# 可以在此覆盖默认配置属性
limitForPeriod: 100
为方法增加@RateLimiter注解
AService.java
@Service
@Slf4j
public class AService {
@RateLimiter(name="backendA")
public void doSomething() {
//业务代码。。。
}
}