如何在断路器中添加重试和自定义恢复方法 - 功能性 java

Posted

技术标签:

【中文标题】如何在断路器中添加重试和自定义恢复方法 - 功能性 java【英文标题】:How can I add retry and custom recovery method in a circuit breaker - functional java 【发布时间】:2021-11-04 02:21:57 【问题描述】:

我正在尝试将弹性 4j 断路器添加到我的项目中。为此,如果调用失败并重试,我有一个自定义机制。如何更改这两个的执行顺序?有没有一种方法可以让我先执行我的自定义机制,如果也失败了,然后重试?

【问题讨论】:

【参考方案1】:

如果我理解正确,您有 2 个不同的电话。您预计有时会失败的第一个电话。但是,您不想重试第一个呼叫,而是要使用第二个呼叫。然后,如果第二个失败,您希望使用断路器重试。

CircuitBreakerConfig config = CircuitBreakerConfig
    .custom()
    .slidingWindowType(CircuitBreakerConfig.SlidingWindowType.COUNT_BASED)
    .slidingWindowSize(10)
    .failureRateThreshold(25.0f)
    .waitDurationInOpenState(Duration.ofSeconds(10))
    .permittedNumberOfCallsInHalfOpenState(4)
    .build();
CircuitBreakerRegistry registry = CircuitBreakerRegistry.of(config);
CircuitBreaker circuitBreaker = registry.circuitBreaker("searchService");

try 
    // First call
    service.search(request)
 catch (SearchException e) 
    // Second call using circuit breaker
    Supplier<List<SearchPojo>> searchSupplier = circuitBreaker
        .decorateSupplier(() -> service.search(request, a_new_parameter));

【讨论】:

以上是关于如何在断路器中添加重试和自定义恢复方法 - 功能性 java的主要内容,如果未能解决你的问题,请参考以下文章

Polly

如何在 Apache Camel 中结合 Redelivery policy 和 Hystrix 断路器?

执行块的最长时间............带有重试和中间延迟

Hystrix:自定义断路器和恢复逻辑

AWS 中的错误重试和指数退避

Spring Cloud——分布式spring应用如何获得重试、负载均衡和断路器的好处