You might use .andThen(secondDecorator)
like a fixed issue does mention
protected <T> Function<Publisher<T>, Publisher<T>> decorateWithCircuitBreakerForSpecificEndpoint() {
final CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
.failureRateThreshold(100)
.recordFailure(throwable -> throwable instanceof RuntimeException)
.ringBufferSizeInClosedState(10)
.ringBufferSizeInHalfOpenState(10)
.waitDurationInOpenState(Duration.ofSeconds(5_000))
.build();
final CircuitBreaker circuitBreaker = this.circuitBreakerRegistry.circuitBreaker("test1", circuitBreakerConfig);
return CircuitBreakerOperator.<T>of(circuitBreaker).andThen(decorateWithCircuitBreakerForSpecificHost());
}
protected <T> Function<Publisher<T>, Publisher<T>> decorateWithCircuitBreakerForSpecificHost() {
final CircuitBreakerConfig circuitBreakerConfig = CircuitBreakerConfig.custom()
.failureRateThreshold(10)
.recordFailure(throwable -> throwable instanceof RuntimeException)
.ringBufferSizeInClosedState(5)
.ringBufferSizeInHalfOpenState(5)
.waitDurationInOpenState(Duration.ofSeconds(5_000))
.build();
final CircuitBreaker circuitBreaker = this.circuitBreakerRegistry.circuitBreaker("test2", circuitBreakerConfig);
return CircuitBreakerOperator.<T>of(circuitBreaker);
}