1

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

4

1 回答 1

0

如果我理解正确,您有 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));
}
于 2021-09-22T09:37:24.687 回答