斷路器屬性配置

您可以在應用程式的配置檔案中配置 CircuitBreakerTimeLimiter 配置或例項。屬性配置的優先順序高於 Java Customizer 配置。

優先順序從高到低排序。

  • 方法(id) 配置 - 用於特定方法或操作

  • 服務(組) 配置 - 用於特定應用程式服務或操作

  • 全域性預設配置

ReactiveResilience4JCircuitBreakerFactory.create(String id, String groupName)
Resilience4JCircuitBreakerFactory.create(String id, String groupName)

全域性預設屬性配置

resilience4j.circuitbreaker:
    configs:
        default:
            registerHealthIndicator: true
            slidingWindowSize: 50

resilience4j.timelimiter:
    configs:
        default:
            timeoutDuration: 5s
            cancelRunningFuture: true

配置屬性配置

resilience4j.circuitbreaker:
    configs:
        groupA:
            registerHealthIndicator: true
            slidingWindowSize: 200

resilience4j.timelimiter:
    configs:
        groupC:
            timeoutDuration: 3s
            cancelRunningFuture: true

例項屬性配置

resilience4j.circuitbreaker:
 instances:
     backendA:
         registerHealthIndicator: true
         slidingWindowSize: 100
     backendB:
         registerHealthIndicator: true
         slidingWindowSize: 10
         permittedNumberOfCallsInHalfOpenState: 3
         slidingWindowType: TIME_BASED
         recordFailurePredicate: io.github.robwin.exception.RecordFailurePredicate

resilience4j.timelimiter:
 instances:
     backendA:
         timeoutDuration: 2s
         cancelRunningFuture: true
     backendB:
         timeoutDuration: 1s
         cancelRunningFuture: false
  • ReactiveResilience4JCircuitBreakerFactory.create("backendA")Resilience4JCircuitBreakerFactory.create("backendA") 將應用 instances backendA properties

  • ReactiveResilience4JCircuitBreakerFactory.create("backendA", "groupA")Resilience4JCircuitBreakerFactory.create("backendA", "groupA") 將應用 instances backendA properties

  • ReactiveResilience4JCircuitBreakerFactory.create("backendC")Resilience4JCircuitBreakerFactory.create("backendC") 將應用 global default properties

  • ReactiveResilience4JCircuitBreakerFactory.create("backendC", "groupC")Resilience4JCircuitBreakerFactory.create("backendC", "groupC") 將應用 global default CircuitBreaker propertiesconfig groupC TimeLimiter properties

有關 Resilience4j 屬性配置的更多資訊,請參閱Resilience4J Spring Boot 2 配置

停用 TimeLimiter

預設情況下,TimeLimiter 是啟用的,並且每個執行都有時間限制作為後盾。此時間限制可以是顯式定義的,也可以使用預設時間限制(由 io.github.resilience4j.timelimiter.TimeLimiterConfig#ofDefaults 提供)。

透過將屬性 spring.cloud.circuitbreaker.resilience4j.disable-time-limiter 設定為 true,可以在全域性範圍內停用 TimeLimiter

spring:
	cloud:
		circuitbreaker:
			resilience4j:
				disable-time-limiter: true

TimeLimiter 也可以使用 spring.cloud.circuitbreaker.resilience4j.disable-time-limiter-map 按如下方式針對特定組或例項停用

spring:
	cloud:
		circuitbreaker:
			resilience4j:
				disable-time-limiter-map:
					group1: true
					instanceA: false
					instanceB: true

這些停用 TimeLimit 的選項在 spring-cloud-circuitbreaker 中提供,適用於基本和響應式斷路器實現。

停用優先順序為:instance > group > global。根據上述配置,instanceBgroup1 停用了 TimeLimiter,但 instanceA 啟用了。對於所有其他例項和組,將回退到全域性設定的 spring.cloud.circuitbreaker.resilience4j.disable-time-limiter 值。如果未設定 spring.cloud.circuitbreaker.resilience4j.disable-time-limiter,預設情況下,其餘斷路器例項和組將啟用 TimeLimit