spring-cloud / spring-cloud-circuitbreaker

Spring Cloud Circuit Breaker API and Implementations
Apache License 2.0
329 stars 110 forks source link

Allow configuration properties (not only default ...) #109

Closed mqueb closed 3 years ago

mqueb commented 3 years ago

currently:

    public Resilience4JCircuitBreakerFactory(
            CircuitBreakerRegistry circuitBreakerRegistry,
            TimeLimiterRegistry timeLimiterRegistry,
            Resilience4jBulkheadProvider bulkheadProvider) {
        this.circuitBreakerRegistry = circuitBreakerRegistry;
        this.timeLimiterRegistry = timeLimiterRegistry;
        this.bulkheadProvider = bulkheadProvider;
        this.defaultConfiguration = id -> new Resilience4JConfigBuilder(id)
                .circuitBreakerConfig(this.circuitBreakerRegistry.getDefaultConfig())
                .timeLimiterConfig(this.timeLimiterRegistry.getDefaultConfig()).build();
    }

could be:

    public Resilience4JCircuitBreakerFactory(
            CircuitBreakerRegistry circuitBreakerRegistry,
            TimeLimiterRegistry timeLimiterRegistry,
            Resilience4jBulkheadProvider bulkheadProvider) {
        this.circuitBreakerRegistry = circuitBreakerRegistry;
        this.timeLimiterRegistry = timeLimiterRegistry;
        this.bulkheadProvider = bulkheadProvider;
        this.defaultConfiguration = id -> new Resilience4JConfigBuilder(id)
                .circuitBreakerConfig(this.circuitBreakerRegistry.circuitBreaker(id).getCircuitBreakerConfig())
                .timeLimiterConfig(this.timeLimiterRegistry.timeLimiter(id).getTimeLimiterConfig()).build();
    }

that way a config like:

resilience4j:
  circuitbreaker:
    configs:
      default:
        minimumNumberOfCalls: 5
        failureRateThreshold: 60
        waitDurationInOpenState: 5000
        slowCallDurationThreshold: 2000
      communicationExterne:
        minimumNumberOfCalls: 5
        failureRateThreshold: 70
        waitDurationInOpenState: 7000
        slowCallDurationThreshold: 2500
        ignoreExceptions:
          - com.ffdffd.commons.domaine.exception.CommunicationExterneApiException
    instances:
      envoyerSms:
        baseConfig: communicationExterne
      appelVocal:
        baseConfig: communicationExterne
      envoiCourriel:
        baseConfig: communicationExterne

with
circuitBreakerFactory.create("envoyerSms") i will get my config without code

same pattern for bulkHead

mqueb commented 3 years ago

110