问题描述
Resilience4J 版本:1.6.1
我们有一个 REST API 可以进行一些后端调用。我们有一个用例来使用 Time Limiter 和 Circuit Breaker 并带有后备
以下代码是 bean 的 init() 方法(Spring)的一部分:
scheduler = Executors.newScheduledThreadPool(100);
cmplStage = new DecorateCompletionStage<Account@R_960_4045@ionRequest>(
() -> CompletableFuture.supplyAsync{
() -> updatePPA(this.ResilienceRequest)));
Function<Throwable,Account@R_960_4045@ionRequest> 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<Account@R_960_4045@ionRequest> 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 (将#修改为@)