斷路器屬性配置
您可以在應用程式的配置檔案中配置 CircuitBreaker
和 TimeLimiter
配置或例項。屬性配置的優先順序高於 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 properties
和config 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
。根據上述配置,instanceB
和 group1
停用了 TimeLimiter
,但 instanceA
啟用了。對於所有其他例項和組,將回退到全域性設定的 spring.cloud.circuitbreaker.resilience4j.disable-time-limiter
值。如果未設定 spring.cloud.circuitbreaker.resilience4j.disable-time-limiter
,預設情況下,其餘斷路器例項和組將啟用 TimeLimit
。