Resilience4j------RateLimiter

高频控制的配置方式与熔断类似,有对应的RateLimiterRegistry 和 RateLimiterConfig,自定义配置的可选项有:

  1. 频次阈值
  2. 阈值刷新时间
  3. 限流后的冷却时间

初始化:

private void init() {
  // For example you want to restrict the calling rate of some method to be not higher than 10 req/ms.
 RateLimiterConfig config = RateLimiterConfig.custom()
      .limitRefreshPeriod(Duration.ofMillis(1))
      .limitForPeriod(10)
      .timeoutDuration(Duration.ofMillis(25))
      .build();

 // Create registry
 RateLimiterRegistry rateLimiterRegistry = RateLimiterRegistry.of(config);

 // Use registry
 RateLimiter rateLimiterWithDefaultConfig = rateLimiterRegistry.rateLimiter("backend");
 RateLimiter rateLimiterWithCustomConfig = rateLimiterRegistry.rateLimiter("backend#2", config);

 // Or create RateLimiter directly
 RateLimiter rateLimiter = RateLimiter.of("NASDAQ :-)", config);
}

高频控制器使用方式:

private void process(){
  RateLimiter rateLimiter = RateLimiter.ofDefaults("NASDAQ :-)");

 // 使用上面定义的高频控制器装饰函数调用
 CheckedRunnable restrictedCall = RateLimiter
      .decorateCheckedRunnable(rateLimiter, () -> System.out.println("Do something"));

 // 第一次调用成功,第二次调用被高频限制
 Try.run(restrictedCall)
      .andThenTry(restrictedCall)
      .onFailure(throwable -> System.out.println("Wait before call it again :)"));

 // 你可以在运行时动态修改高频控制器配置,但新的冷却时间不会影响当前处于冷却状态的线程,新的阈值也不会影响处于当前一轮控制的线程:
 // 在下一轮控制中,阈值变更为100
 rateLimiter.changeLimitForPeriod(100);
}

监听高频控制事件

高频控制器事件RateLimiterEvent包含允许执行和拒绝执行事件,所有事件包含发生时间、相关高频控制器名称的信息。

rateLimiter.getEventPublisher()

.onSuccess(event -> logger.info(...))

.onFailure(event -> logger.info(...));

高频控制器状态

RateLimiter limit;

RateLimiter.Metrics metrics = limit.getMetrics();

int numberOfThreadsWaitingForPermission = metrics.getNumberOfWaitingThreads();

int availablePermissions = metrics.getAvailablePermissions();

AtomicRateLimiter atomicLimiter;

long nanosToWaitForPermission = atomicLimiter.getNanosToWait();

 

请使用手机"扫一扫"x
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值