...
Komma igång
Börja med att annotera din resurs.
Resursen brukar vanligtvis var t.ex. utgöras av en integrationsklient, databas-klient, etc.:, databasklient, osv. Men det kan i princip vara vilken metod eller klass som helst som man vill övervaka med en “circuit-breaker” samt tillhörande “health-indicator”.
Code Block |
---|
@FeignClient(name = "MyFeignClient", url = "${integration.backend.url}", configuration = MyFeignClientConfiguration.class) @CircuitBreaker(name = "MyFeignClient") public interface MyFeignClient { ... } |
[2]
Skapar en “Circuit breaker” samt “Health indicator” med namnet “MyFeignClient”. Annoteringen kan placeras på både klass- och metodnivå. I detta exempel har den placerats på klassnivå och slår därför på alla metoder i klassen/interfacet.
Ovanstående är allt som krävs för att att skapa en “Circuit breaker” som bryter kretsen om resursen kastar en exception. Kretsen kommer vid dessa tillfällen att hållas öppen under en kort tidsperiod (default 60 sekunder), innan den övergår till ett “halvöppet läge”“halvöppet” läge. I det “halv-öppna” “halvöppna” läget tillåts ett konfigurerbart antal anrop (konfigurerbart) för att utvärdera resursens status. Under tiden som kretsen hålls öppen kommer den automatiskt registrerade health-indicatorn att visa “DOWN” för denna aktuell resurs. När resursen åter fungerar bra kommer kretsen att stängas helt och “health-indicatorn” visar “UP”.
...
Code Block | ||
---|---|---|
| ||
resilience4j.circuitbreaker.instances.MyFeignClient.ignoreExceptions=se.sundsvall.dept44.exception.ClientProblem [default: ej satt] resilience4j.circuitbreaker.instances.MyFeignClient.failureRateThreshold=60 [default: 50] resilience4j.circuitbreaker.instances.MyFeignClient.waitDurationInOpenState=200s [default: 60s] resilience4j.circuitbreaker.instances.MyFeignClient.allowHealthIndicatorToFail=false [default: true] resilience4j.circuitbreaker.instances.MyFeignClient.slidingWindowSize=20 [default: 10] resilience4j.circuitbreaker.instances.MyFeignClient.permittedNumberOfCallsInHalfOpenState=10 [default: 5] # Create common settings to be used in [default: 5] multiple clients. resilience4j.circuitbreaker.configs.mySharedConfig.baseConfig=default resilience4j.circuitbreaker.configs.mySharedConfig.slidingWindowSize=50 # Assign these common settings to my client. resilience4j.circuitbreaker.instances.MyOtherFeignClient.baseConfig=mySharedConfig |
[1]
Låter resursen “MyFeignClient” ignorera en lista av Exceptions. Kastas dessa fel markeras anropet som “successful”. Det torde t.ex. vara önskvärt att låta fel i HTTP-400 serien ignoreras (dessa betyder ju inte att integrationen har problem).[2]
Tröskelvärde för antal fel (inom slidingWindowSize
) som skall öppna kretsen och markera “health-indicator” som “DOWN”. Anges i procent.[3]
Den tid som kretsen hålls öppen innan den övergår till ett “halv-öppet” läge. [4]
Låter applicationens “health” återspeglas av enskilda “health-indicator:s”. M.a.o. om en “health-indicator” är “DOWN” så blir applicationens health också “DOWN”, om denna property är satt till “true”.[5]
Storleken på den buffer som används för att spara och utvärdera resultatet på anropen när kretsen är sluten.[6]
Antal tillåtna anrop som tillåts när kretsen är “halv-öppen”. [89]
Skapar en egen konfigurationsprofil (mySharedConfig
) som “ärver” från default (definierad i dept44).[910]
Skriver över default-värden för en property i mySharedConfig
[1012]
Sätter aktuella värden i konfigurationsprofilen till en resurs (myOtherSharedConfig
). Denna mekanism (d.v.s. rad: 8, 9, 10, 12) är bra smidig om man t.ex. har flera “circuit-breakers” som måste tilldelas andra värden än default , för att och man vill slippa upprepningar.
Ingorerade exceptionsUndantagna undantag
Det är viktigt att ha i åtanke att en “circuit-breaker” reagaerar reagerar på alla typer av undantag (exceptions) som inte är exkluderade via propertyn ignoreExceptions
. Av den anledningen är det viktigt att särskilja på exceptions som beror på rena indata-fel (som inte betyder att resursen har problem) och på de exceptions som tyder på att tjänsten har problem.
...