微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当使用 TimeLimiter 和 CircuitBreaker 作为 REST API 的一部分时,响应时间非常高

如何解决当使用 TimeLimiter 和 CircuitBreaker 作为 REST API 的一部分时,响应时间非常高

Resilience4J 版本:1.6.1

我们有一个 REST API 可以进行一些后端调用。我们有一个用例来使用 Time Limiter 和 Circuit Breaker 并带有后备

以下代码是 bean 的 init() 方法(Spring)的一部分:

scheduler = Executors.newScheduledThreadPool(100);
cmplStage = new DecorateCompletionStage<AccountinformationRequest>(
        () -> CompletableFuture.supplyAsync{
            () -> updatePPA(this.ResilienceRequest)));
Function<Throwable,AccountinformationRequest> backupCall = 
      (Throwable) -> FallBackupdatePPA(Throwable,this.ResilienceRequest);  
List<Class<? extends Throwable>> exList = new ArrayList<Class<? extends Throwable>>();
exList.add(CallNotPermittedException.class);
//With TimeLimiter & CircuitBreaker
decorator = cmplStage
        .withTimeLimiter(timeLimiterBean.timeLimiterUpdatePPA,scheduler)
        .withCircuitBreaker(CbObject.circuitBreakerUpdatePPA)
        .withFallback(exList,backupCall)
        .decorate();

这个装饰器,我们在 REST API 被触发时调用

{
//Body
...
..
CompletableFuture<AccountinformationRequest> wrappedBackendCall = decorator.get().toCompletableFuture();
return wrappedBackendCall.join();
}

配置:

TimeLimiterConfig config = TimeLimiterConfig.custom()
.cancelRunningFuture(false)
.timeoutDuration(Duration.ofMillis(5000)).build();

CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
.minimumNumberOfCalls(1)
.failureRateThreshold(50)
.waitDurationInopenState(Duration.ofMillis(2500))
.permittednumberOfCallsInHalfOpenState(2)
.slidingWindowSize(4)
.ignoreExceptions(NullPointerException.class)
.build();

当多个客户端同时访问此 REST API 时,使用 Timitlimer 和 CirucitBreaker 装饰器后响应时间非常长。

你能帮我纠正我的方法或配置吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。