private CircuitBreaker getCircuit(Long operationId) { CircuitBreaker breaker = circuits.get(operationId); if (Objects.isNull(breaker)) { CircuitBreaker circuitBreaker = new CircuitBreaker() .withFailureThreshold(property.getFailsafe().getFailureNumber()) .withSuccessThreshold(property.getFailsafe().getSucessNumber()) .withDelay(property.getFailsafe().getDelayTimeSeconds(), TimeUnit.SECONDS); circuits.put(operationId, circuitBreaker); breaker = circuitBreaker; } return breaker; }
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; }