【问题标题】:Change timeout for Spring Cloud Circuit Breaker at runtime?在运行时更改 Spring Cloud Circuit Breaker 的超时?
【发布时间】:2021-05-12 20:34:28
【问题描述】:

我正在使用 Spring Cloud Circuit Breaker 2.0.0(resilience4j 实现)在我的应用程序中进行断路和超时。我创建了以下配置:

@Bean
public Customizer<Resilience4JCircuitBreakerFactory> defaultCustomizer() {
    return factory -> 
        factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
                .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofSeconds(10)).build())
                .circuitBreakerConfig(..)
                .build());
}

现在我想编写一个集成测试来验证超时发生时我的行为是否正确。为此,我想暂时将上述配置中指定的超时持续时间更改为 1 毫秒而不是 10 秒。

所以我的问题是:在编写 Spring Boot 集成测试时,如何更改 TimeLimiterConfig(临时)的超时值?

【问题讨论】:

    标签: spring spring-boot integration-testing resilience4j spring-cloud-circuitbreaker


    【解决方案1】:

    您可以使用@Value Spring annotation 从资源文件夹src/main/resources/common.properties 中检索配置文件中的值。

    @Bean
    public Customizer<Resilience4JCircuitBreakerFactory> defaultCustomizer(
        @Value("${duration.milli:600}") int durationMilli) {
        return factory -> 
            factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
                    .timeLimiterConfig(TimeLimiterConfig.custom().timeoutDuration(Duration.ofMilli(durationMilli)).build())
                    .circuitBreakerConfig(..)
                    .build());
    }
    

    然后将值设置为src/main/resources/common.properties

    duration.milli=600
    

    当您进行测试时,您可以在test 文件夹src/test/resources/common.properties 中使用不同的值配置另一个资源文件。

    duration.milli=1
    

    【讨论】:

      猜你喜欢
      • 2020-09-24
      • 2011-11-03
      • 2021-01-11
      • 2013-08-27
      • 1970-01-01
      • 2021-04-06
      • 2016-10-01
      • 2020-03-04
      • 1970-01-01
      相关资源
      最近更新 更多