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() {
   
			}
		});
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值