public static CircuitBreaker createCircuitBreaker(final RiptideProperties.Client client, final CircuitBreakerListener listener) { final CircuitBreaker breaker = new CircuitBreaker(); Optional.ofNullable(client.getTimeout()) .ifPresent(timeout -> timeout.applyTo(breaker::withTimeout)); Optional.ofNullable(client.getCircuitBreaker().getFailureThreshold()) .ifPresent(threshold -> threshold.applyTo(breaker::withFailureThreshold)); Optional.ofNullable(client.getCircuitBreaker().getDelay()) .ifPresent(delay -> delay.applyTo(breaker::withDelay)); Optional.ofNullable(client.getCircuitBreaker().getSuccessThreshold()) .ifPresent(threshold -> threshold.applyTo(breaker::withSuccessThreshold)); breaker .onOpen(listener::onOpen) .onHalfOpen(listener::onHalfOpen) .onClose(listener::onClose); return breaker; }