サーキットブレーカープロパティの構成
アプリケーションの構成プロパティファイルで、CircuitBreaker
および TimeLimiter
構成またはインスタンスを構成できます。プロパティ構成は、Java Customizer
構成よりも優先度が高くなります。
優先順位は上から順。
Method(id) config - 特定のメソッドまたは操作について
サービス (グループ) 構成 - 特定のアプリケーションサービスまたは操作について
グローバルデフォルト設定
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 and config groupC TimeLimiter properties
を適用します
Resilience4j プロパティ構成の詳細については、Resilience4J Spring Boot 2 の構成 (英語) を参照してください。
TimeLimiter の無効化
デフォルトでは、TimeLimiter
は有効になっており、すべての実行には時間制限が設けられています。この時間制限は明示的に定義されるか、デフォルトの時間制限 ( io.github.resilience4j.timelimiter.TimeLimiterConfig#ofDefaults
によって提供される) が使用されます。
TimeLimiter
は、プロパティ spring.cloud.circuitbreaker.resilience4j.disable-time-limiter
を true
に設定することでグローバルに無効にすることができます。
spring:
cloud:
circuitbreaker:
resilience4j:
disable-time-limiter: true
以下のように、spring.cloud.circuitbreaker.resilience4j.disable-time-limiter-map
を使用して特定のグループまたはインスタンスに対して TimeLimiter
を無効にすることもできます。
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
が有効になっています。