resilience4j-ratelimiter:限流器

本文介绍了如何在项目中使用Resilience4j的ratelimiter模块进行流量控制。首先,详细说明了添加依赖的方法,然后通过API方式展示了具体的使用步骤,并提供了测试代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

resilience4j-ratelimiter:限流器,用作流控

依赖

<properties>
	<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	<resilience4j.version>0.16.0</resilience4j.version>
</properties>
<dependency>
	<groupId>io.github.resilience4j</groupId>
	<artifactId>resilience4j-ratelimiter</artifactId>
	<version>${resilience4j.version}</version>
</dependency>

application.yml配置内容如下

resilience4j:
	ratelimiter:
		limiters:
			limiterA: # #RateLimiter名称
				limit-for-period: 1 # 每时间单位可执行处理数
				limit-refresh-period-in-millis: 10000 # 单位时间(毫秒)
				timeout-in-millis: 10000 # 获取令牌的等待超时时间, 超时为获取到令牌将抛出异常
			limiterB:
				limit-for-period: 1 # 每时间单位可执行处理数
				limit-refresh-period-in-millis: 10000 #单位时间(毫秒)
				timeout-in-millis: 10000 # 获取令牌的等待超时时间, 超时为获取到令牌将抛出异常

api方式使用

// 创建限流器配置
RateLimiterConfig config =  RateLimiterConfig.custom()
				.limitRefreshPeriod(Duration.ofMillis(1000))
				.limitForPeriod(1)
				.timeoutDuration(Duration.ofMillis(1000))
				.build();
// 创建限流器注册器RateLimiterRegistry
RateLimiterRegistry rateLimiterRegistry = RateLimiterRegistry.of(config);
// 通过RateLimiterRegistry来创建限流器
RateLimiter rateLimiterWithDefaultConfig = rateLimiterRegistry.rateLimiter("backend1");
RateLimiter rateLimiterWithCustomConfig = rateLimiterRegistry.rateLimiter("backend2", config);
// 通过RateLimiter创建限流器
RateLimiter rateLimiter = RateLimiter.of("emailSendRateLimiter", config);
// 限流器指标:等待线程数,可用令牌数
RateLimiter.Metrics metrics = rateLimiter.getMetrics();
rateLimiter.getEventPublisher().onSuccess(event -> {
   
   
	System.out.println(event.getEventType() + ":::可用令牌数: " + metrics.getAvailablePermissions() + ", 等待线程数: "
			+ metrics.getNumberOfWaitingThreads());
}).onFailure(event -> {
   
   
	System.out.println(event.getEventType() + ":::可用令牌数: " + metrics.getAvailablePermissions() + ", 等待线程数: "
			+ metrics.getNumberOfWaitingThreads());
});
// 创建一个受RateLimiter限制的runnable。
Runnable task = RateLimiter.decorateRunnable(rateLimiter, new Runnable() {
   
   
			@Override
			public void run() {
   
   
				// TODO Auto-generated method stub
				
			}
		});
// 装饰并执行装饰的Runnable。
rateLimiter.executeRunnable(new Runnable() {
   
   
			@Override
			public void run() {
   
   
			}
		});
ThreadPoolExecutor poolExecutor 
### 如何在Spring Boot项目中使用Resilience4j实现限流功能 #### 添加依赖 为了在Spring Boot应用程序中启用Resilience4j的限流支持,需引入`resilience4j-spring-boot2`和`resilience4j-ratelimiter`两个依赖。此外,对于监控目的,建议加入`spring-boot-starter-actuator`以便于查看应用的状态。 ```xml <dependencies> <!-- Resilience4j核心库 --> <dependency> <groupId>io.github.resilience4j</groupId> <artifactId>resilience4j-spring-boot2</artifactId> </dependency> <!-- 限流器模块 --> <dependency> <groupId>io.github.resilience4j</groupId> <artifactId>resilience4j-ratelimiter</artifactId> </dependency> <!-- 可选:用于暴露指标端点 --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> </dependencies> ``` #### 配置文件设置 接下来,在项目的`application.yml`或`application.properties`配置文件里定义具体的限流参数。这里展示了一个简单的YAML格式的例子: ```yaml resilience4j: ratelimiter: instances: default: limitForPeriod: 10 # 每个周期允许的最大调用量 limitRefreshPeriod: 1s # 周期时间长度 timeoutDuration: 0ms # 超时等待时间为零表示不等待 ``` 此部分设定适用于名为"default"的限流实例,意味着每秒最多可以接受10次请求[^1]。 #### 控制器层的应用 最后一步是在控制器类的方法上添加`@RateLimiter`注解来指定要保护的服务接口。下面给出了一段Java代码片段作为示范: ```java import io.github.resilience4j.ratelimiter.annotation.RateLimiter; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class RateLimiterController { @GetMapping("/rate-limited-endpoint") @RateLimiter(name = "default", fallbackMethod = "fallback") public String rateLimitedEndpoint() { // 执行具体业务逻辑... System.out.println("限流示例:处理请求"); return "请求成功"; } private String fallback(Throwable throwable){ return "超过速率限制,请稍后再试."; } } ``` 上述例子展示了如何利用`@RateLimiter`注解以及自定义回退方法`fallback()`当触发限流条件时返回友好的提示信息给客户端[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值