Resilience4j注解执行顺序与配置验证:按需触发重试逻辑
问题:Resilience4j注解执行流程验证与配置优化
背景
我们的服务需要调用多个下游服务,要求为所有下游调用实现断路器(Circuit Breaker)、重试(Retry)、**时间限制器(TimeLimiter)和舱壁隔离(Bulkhead)**功能。
当前代码实现
@Override @Bulkhead(name = "downstream1", type = Type.THREADPOOL, fallbackMethod = "downstream1Fallback") @TimeLimiter(name = "downstream1", fallbackMethod = "downstream1Fallback") @CircuitBreaker(name = "downstream1", fallbackMethod = "downstream1Fallback") @Retry(name = "downstream1", fallbackMethod = "downstream1Fallback") public CompletableFuture<String> downstream1(String a) { return CompletableFuture.completedFuture(process(a))); } public CompletableFuture<String> downstream1Fallback(String a, Exception e) { return CompletableFuture.completedFuture(""); // 返回空字符串作为降级结果 }
现有配置(app.properties)
# 超时配置 resilience4j.timelimiter.instances.downstream1.timeout-duration=30 # 30毫秒 # 重试配置 resilience4j.retry.instances.downstream1.max-attempts=1 # 线程池舱壁配置 resilience4j.thread-pool-bulkhead.instances.downstream1.core-thread-pool-size=30 resilience4j.thread-pool-bulkhead.instances.downstream1.max-thread-pool-size=50 resilience4j.thread-pool-bulkhead.instances.downstream1.queue-capacity=10
核心业务需求
- 当Bulkhead线程池已满、下游调用超时或断路器处于打开状态时,禁止触发重试
- 仅当下游服务抛出服务端异常时,才执行重试逻辑
根据Resilience4j官方规范,注解执行顺序为:Retry ( CircuitBreaker ( RateLimiter ( TimeLimiter ( Bulkhead ( 目标方法 ) ) ) ) )
我对执行流程的理解
case 1: 若线程池已满,直接触发fallback并抛出BulkheadFullException,不会进入重试流程;否则创建新线程执行下游调用。 case 2: 若线程执行时间超过TimeLimiter配置的超时时间,触发fallback并抛出TimeoutException,不触发重试。 case 3: 若断路器处于打开状态,触发fallback并抛出CallNotPermittedException,不触发重试。 case 4: 只有在线程池未满、未超时且断路器处于关闭状态,同时下游抛出上述异常以外的服务端异常时,才会按照Retry配置执行重试。
提问
请问上述流程理解是否正确?是否需要修改现有app.properties配置来满足业务需求?
内容的提问来源于stack exchange,提问作者tusharRawat
相关产品推荐
相关产品推荐

