resilience4j-ratelimiter:限流器

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

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() {
   
			}
		});
Resilience4j-cache 是一个基于 Resilience4j 的缓存库,提供了对缓存的重试、熔断和限流等功能。它可以很方便地与 Spring Boot 集成使用。 以下是使用 Resilience4j-cache 的步骤: 1. 添加依赖 在 pom.xml 文件中添加以下依赖: ``` <dependency> <groupId>io.github.resilience4j</groupId> <artifactId>resilience4j-cache</artifactId> <version>1.7.0</version> </dependency> ``` 2. 配置缓存 在 Spring Boot 的配置文件中添加以下配置: ``` resilience4j.cache.caffeine.instances.myCache.maximum-size=1000 resilience4j.cache.caffeine.instances.myCache.expire-after-write=5s ``` 该配置表示创建一个名为 `myCache` 的缓存,最大容量为 1000,写入后 5 秒过期。 3. 创建缓存 在代码中创建缓存实例: ``` Cache<String, String> cache = Cache.of("myCache", CacheConfig .custom() .expireAfterWrite(Duration.ofSeconds(5)) .maximumSize(1000) .build() ); ``` 4. 使用缓存 使用 `cache.get(key, loader)` 方法获取缓存项,如果缓存不存在,则会调用 `loader` 方法加载数据。 ``` String value = cache.get("key", () -> { // 从数据库或其他地方加载数据 return "value"; }); ``` 5. 配置重试、熔断和限流 可以使用 Resilience4j 提供的 `Retry`、`CircuitBreaker` 和 `RateLimiter` 等组件对缓存进行重试、熔断和限流等操作。 例如,使用 `Retry` 组件对缓存进行重试操作: ``` Cache<String, String> cache = Cache.of("myCache", CacheConfig .custom() .expireAfterWrite(Duration.ofSeconds(5)) .maximumSize(1000) .build() ); Retry retry = Retry.ofDefaults("retry"); Function<String, String> decorated = Retry.decorateFunction(retry, cache::get); String value = decorated.apply("key"); ``` 以上就是使用 Resilience4j-cache 的基本步骤。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值