[{"data":1,"prerenderedAt":886},["ShallowReactive",2],{"tag-circuit-breaker":3},[4],{"_path":5,"_dir":6,"_draft":7,"_partial":7,"_locale":8,"title":9,"description":10,"date":11,"layout":12,"subtitle":13,"image":14,"optimized_image":14,"category":15,"tags":16,"author":21,"paginate":7,"body":22,"_type":880,"_id":881,"_source":882,"_file":883,"_stem":884,"_extension":885},"/posts/circuit-breaking-resilience","posts",false,"","Circuit Breaking in Distributed Systems","An expert guide to understanding and implementing circuit breakers in distributed systems, with practical Java examples using Resilience4j and best practices.","2024-07-15T11:00:00.000Z","post","Enhancing Resilience with Circuit Breaker Patterns","/assets/img/uploads/circuit-breaking-resilience.png","code",[15,17,18,19,20],"java","resilience","circuit-breaker","distributed-systems","jaimedearcos",{"type":23,"children":24,"toc":868},"root",[25,37,44,49,85,90,96,101,119,125,132,137,266,272,491,497,502,670,676,681,775,780,786,809,815,820,827,862],{"type":26,"tag":27,"props":28,"children":29},"element","blockquote",{},[30],{"type":26,"tag":31,"props":32,"children":33},"p",{},[34],{"type":35,"value":36},"text","In modern distributed systems, failures are inevitable. The circuit breaker pattern helps maintain system stability by preventing failures from cascading across service boundaries. In this post, we'll dive deep into circuit breakers, explore their importance, and demonstrate practical implementation using Resilience4j in Java.",{"type":26,"tag":38,"props":39,"children":41},"h2",{"id":40},"understanding-the-circuit-breaker-pattern",[42],{"type":35,"value":43},"Understanding the Circuit Breaker Pattern",{"type":26,"tag":31,"props":45,"children":46},{},[47],{"type":35,"value":48},"The circuit breaker pattern prevents a service from making repeated calls to an external service that is experiencing issues. It has three main states:",{"type":26,"tag":50,"props":51,"children":52},"ul",{},[53,65,75],{"type":26,"tag":54,"props":55,"children":56},"li",{},[57,63],{"type":26,"tag":58,"props":59,"children":60},"strong",{},[61],{"type":35,"value":62},"Closed:",{"type":35,"value":64}," All requests pass through normally.",{"type":26,"tag":54,"props":66,"children":67},{},[68,73],{"type":26,"tag":58,"props":69,"children":70},{},[71],{"type":35,"value":72},"Open:",{"type":35,"value":74}," Requests fail fast, bypassing the problematic service.",{"type":26,"tag":54,"props":76,"children":77},{},[78,83],{"type":26,"tag":58,"props":79,"children":80},{},[81],{"type":35,"value":82},"Half-Open:",{"type":35,"value":84}," A limited number of requests test if the external service has recovered.",{"type":26,"tag":31,"props":86,"children":87},{},[88],{"type":35,"value":89},"This mechanism helps improve the resilience and responsiveness of your systems.",{"type":26,"tag":38,"props":91,"children":93},{"id":92},"when-to-use-circuit-breakers",[94],{"type":35,"value":95},"When to Use Circuit Breakers",{"type":26,"tag":31,"props":97,"children":98},{},[99],{"type":35,"value":100},"Circuit breakers are essential when:",{"type":26,"tag":50,"props":102,"children":103},{},[104,109,114],{"type":26,"tag":54,"props":105,"children":106},{},[107],{"type":35,"value":108},"Your system relies on remote calls (microservices architecture, external APIs).",{"type":26,"tag":54,"props":110,"children":111},{},[112],{"type":35,"value":113},"You need to prevent failure propagation.",{"type":26,"tag":54,"props":115,"children":116},{},[117],{"type":35,"value":118},"You aim to improve user experience by quickly responding to failures.",{"type":26,"tag":38,"props":120,"children":122},{"id":121},"implementing-circuit-breakers-with-resilience4j",[123],{"type":35,"value":124},"Implementing Circuit Breakers with Resilience4j",{"type":26,"tag":126,"props":127,"children":129},"h3",{"id":128},"step-1-adding-dependencies",[130],{"type":35,"value":131},"Step 1: Adding Dependencies",{"type":26,"tag":31,"props":133,"children":134},{},[135],{"type":35,"value":136},"Add Resilience4j dependencies to your project (Maven example):",{"type":26,"tag":138,"props":139,"children":143},"pre",{"className":140,"code":141,"language":142,"meta":8,"style":8},"language-xml shiki shiki-themes github-dark github-light","\u003Cdependency>\n    \u003CgroupId>io.github.resilience4j\u003C/groupId>\n    \u003CartifactId>resilience4j-circuitbreaker\u003C/artifactId>\n    \u003Cversion>2.0.2\u003C/version>\n\u003C/dependency>\n","xml",[144],{"type":26,"tag":15,"props":145,"children":146},{"__ignoreMap":8},[147,170,197,223,249],{"type":26,"tag":148,"props":149,"children":152},"span",{"class":150,"line":151},"line",1,[153,159,165],{"type":26,"tag":148,"props":154,"children":156},{"style":155},"--shiki-default:#E1E4E8;--shiki-light:#24292E",[157],{"type":35,"value":158},"\u003C",{"type":26,"tag":148,"props":160,"children":162},{"style":161},"--shiki-default:#85E89D;--shiki-light:#22863A",[163],{"type":35,"value":164},"dependency",{"type":26,"tag":148,"props":166,"children":167},{"style":155},[168],{"type":35,"value":169},">\n",{"type":26,"tag":148,"props":171,"children":173},{"class":150,"line":172},2,[174,179,184,189,193],{"type":26,"tag":148,"props":175,"children":176},{"style":155},[177],{"type":35,"value":178},"    \u003C",{"type":26,"tag":148,"props":180,"children":181},{"style":161},[182],{"type":35,"value":183},"groupId",{"type":26,"tag":148,"props":185,"children":186},{"style":155},[187],{"type":35,"value":188},">io.github.resilience4j\u003C/",{"type":26,"tag":148,"props":190,"children":191},{"style":161},[192],{"type":35,"value":183},{"type":26,"tag":148,"props":194,"children":195},{"style":155},[196],{"type":35,"value":169},{"type":26,"tag":148,"props":198,"children":200},{"class":150,"line":199},3,[201,205,210,215,219],{"type":26,"tag":148,"props":202,"children":203},{"style":155},[204],{"type":35,"value":178},{"type":26,"tag":148,"props":206,"children":207},{"style":161},[208],{"type":35,"value":209},"artifactId",{"type":26,"tag":148,"props":211,"children":212},{"style":155},[213],{"type":35,"value":214},">resilience4j-circuitbreaker\u003C/",{"type":26,"tag":148,"props":216,"children":217},{"style":161},[218],{"type":35,"value":209},{"type":26,"tag":148,"props":220,"children":221},{"style":155},[222],{"type":35,"value":169},{"type":26,"tag":148,"props":224,"children":226},{"class":150,"line":225},4,[227,231,236,241,245],{"type":26,"tag":148,"props":228,"children":229},{"style":155},[230],{"type":35,"value":178},{"type":26,"tag":148,"props":232,"children":233},{"style":161},[234],{"type":35,"value":235},"version",{"type":26,"tag":148,"props":237,"children":238},{"style":155},[239],{"type":35,"value":240},">2.0.2\u003C/",{"type":26,"tag":148,"props":242,"children":243},{"style":161},[244],{"type":35,"value":235},{"type":26,"tag":148,"props":246,"children":247},{"style":155},[248],{"type":35,"value":169},{"type":26,"tag":148,"props":250,"children":252},{"class":150,"line":251},5,[253,258,262],{"type":26,"tag":148,"props":254,"children":255},{"style":155},[256],{"type":35,"value":257},"\u003C/",{"type":26,"tag":148,"props":259,"children":260},{"style":161},[261],{"type":35,"value":164},{"type":26,"tag":148,"props":263,"children":264},{"style":155},[265],{"type":35,"value":169},{"type":26,"tag":126,"props":267,"children":269},{"id":268},"step-2-configuring-circuit-breaker",[270],{"type":35,"value":271},"Step 2: Configuring Circuit Breaker",{"type":26,"tag":138,"props":273,"children":276},{"className":274,"code":275,"language":17,"meta":8,"style":8},"language-java shiki shiki-themes github-dark github-light","CircuitBreakerConfig config = CircuitBreakerConfig.custom()\n    .failureRateThreshold(50)\n    .waitDurationInOpenState(Duration.ofMillis(1000))\n    .permittedNumberOfCallsInHalfOpenState(2)\n    .minimumNumberOfCalls(5)\n    .build();\n\nCircuitBreaker circuitBreaker = CircuitBreaker.of(\"myService\", config);\n",[277],{"type":26,"tag":15,"props":278,"children":279},{"__ignoreMap":8},[280,310,339,375,400,425,443,453],{"type":26,"tag":148,"props":281,"children":282},{"class":150,"line":151},[283,288,294,299,305],{"type":26,"tag":148,"props":284,"children":285},{"style":155},[286],{"type":35,"value":287},"CircuitBreakerConfig config ",{"type":26,"tag":148,"props":289,"children":291},{"style":290},"--shiki-default:#F97583;--shiki-light:#D73A49",[292],{"type":35,"value":293},"=",{"type":26,"tag":148,"props":295,"children":296},{"style":155},[297],{"type":35,"value":298}," CircuitBreakerConfig.",{"type":26,"tag":148,"props":300,"children":302},{"style":301},"--shiki-default:#B392F0;--shiki-light:#6F42C1",[303],{"type":35,"value":304},"custom",{"type":26,"tag":148,"props":306,"children":307},{"style":155},[308],{"type":35,"value":309},"()\n",{"type":26,"tag":148,"props":311,"children":312},{"class":150,"line":172},[313,318,323,328,334],{"type":26,"tag":148,"props":314,"children":315},{"style":155},[316],{"type":35,"value":317},"    .",{"type":26,"tag":148,"props":319,"children":320},{"style":301},[321],{"type":35,"value":322},"failureRateThreshold",{"type":26,"tag":148,"props":324,"children":325},{"style":155},[326],{"type":35,"value":327},"(",{"type":26,"tag":148,"props":329,"children":331},{"style":330},"--shiki-default:#79B8FF;--shiki-light:#005CC5",[332],{"type":35,"value":333},"50",{"type":26,"tag":148,"props":335,"children":336},{"style":155},[337],{"type":35,"value":338},")\n",{"type":26,"tag":148,"props":340,"children":341},{"class":150,"line":199},[342,346,351,356,361,365,370],{"type":26,"tag":148,"props":343,"children":344},{"style":155},[345],{"type":35,"value":317},{"type":26,"tag":148,"props":347,"children":348},{"style":301},[349],{"type":35,"value":350},"waitDurationInOpenState",{"type":26,"tag":148,"props":352,"children":353},{"style":155},[354],{"type":35,"value":355},"(Duration.",{"type":26,"tag":148,"props":357,"children":358},{"style":301},[359],{"type":35,"value":360},"ofMillis",{"type":26,"tag":148,"props":362,"children":363},{"style":155},[364],{"type":35,"value":327},{"type":26,"tag":148,"props":366,"children":367},{"style":330},[368],{"type":35,"value":369},"1000",{"type":26,"tag":148,"props":371,"children":372},{"style":155},[373],{"type":35,"value":374},"))\n",{"type":26,"tag":148,"props":376,"children":377},{"class":150,"line":225},[378,382,387,391,396],{"type":26,"tag":148,"props":379,"children":380},{"style":155},[381],{"type":35,"value":317},{"type":26,"tag":148,"props":383,"children":384},{"style":301},[385],{"type":35,"value":386},"permittedNumberOfCallsInHalfOpenState",{"type":26,"tag":148,"props":388,"children":389},{"style":155},[390],{"type":35,"value":327},{"type":26,"tag":148,"props":392,"children":393},{"style":330},[394],{"type":35,"value":395},"2",{"type":26,"tag":148,"props":397,"children":398},{"style":155},[399],{"type":35,"value":338},{"type":26,"tag":148,"props":401,"children":402},{"class":150,"line":251},[403,407,412,416,421],{"type":26,"tag":148,"props":404,"children":405},{"style":155},[406],{"type":35,"value":317},{"type":26,"tag":148,"props":408,"children":409},{"style":301},[410],{"type":35,"value":411},"minimumNumberOfCalls",{"type":26,"tag":148,"props":413,"children":414},{"style":155},[415],{"type":35,"value":327},{"type":26,"tag":148,"props":417,"children":418},{"style":330},[419],{"type":35,"value":420},"5",{"type":26,"tag":148,"props":422,"children":423},{"style":155},[424],{"type":35,"value":338},{"type":26,"tag":148,"props":426,"children":428},{"class":150,"line":427},6,[429,433,438],{"type":26,"tag":148,"props":430,"children":431},{"style":155},[432],{"type":35,"value":317},{"type":26,"tag":148,"props":434,"children":435},{"style":301},[436],{"type":35,"value":437},"build",{"type":26,"tag":148,"props":439,"children":440},{"style":155},[441],{"type":35,"value":442},"();\n",{"type":26,"tag":148,"props":444,"children":446},{"class":150,"line":445},7,[447],{"type":26,"tag":148,"props":448,"children":450},{"emptyLinePlaceholder":449},true,[451],{"type":35,"value":452},"\n",{"type":26,"tag":148,"props":454,"children":456},{"class":150,"line":455},8,[457,462,466,471,476,480,486],{"type":26,"tag":148,"props":458,"children":459},{"style":155},[460],{"type":35,"value":461},"CircuitBreaker circuitBreaker ",{"type":26,"tag":148,"props":463,"children":464},{"style":290},[465],{"type":35,"value":293},{"type":26,"tag":148,"props":467,"children":468},{"style":155},[469],{"type":35,"value":470}," CircuitBreaker.",{"type":26,"tag":148,"props":472,"children":473},{"style":301},[474],{"type":35,"value":475},"of",{"type":26,"tag":148,"props":477,"children":478},{"style":155},[479],{"type":35,"value":327},{"type":26,"tag":148,"props":481,"children":483},{"style":482},"--shiki-default:#9ECBFF;--shiki-light:#032F62",[484],{"type":35,"value":485},"\"myService\"",{"type":26,"tag":148,"props":487,"children":488},{"style":155},[489],{"type":35,"value":490},", config);\n",{"type":26,"tag":126,"props":492,"children":494},{"id":493},"step-3-using-circuit-breaker",[495],{"type":35,"value":496},"Step 3: Using Circuit Breaker",{"type":26,"tag":31,"props":498,"children":499},{},[500],{"type":35,"value":501},"Wrap service calls using the circuit breaker:",{"type":26,"tag":138,"props":503,"children":505},{"className":274,"code":504,"language":17,"meta":8,"style":8},"Supplier\u003CString> decoratedSupplier = CircuitBreaker.decorateSupplier(circuitBreaker, () -> myService.remoteCall());\n\nTry.ofSupplier(decoratedSupplier)\n    .recover(throwable -> \"Fallback response\")\n    .onSuccess(result -> System.out.println(\"Response: \" + result));\n",[506],{"type":26,"tag":15,"props":507,"children":508},{"__ignoreMap":8},[509,565,572,590,620],{"type":26,"tag":148,"props":510,"children":511},{"class":150,"line":151},[512,517,522,527,531,535,540,545,550,555,560],{"type":26,"tag":148,"props":513,"children":514},{"style":155},[515],{"type":35,"value":516},"Supplier\u003C",{"type":26,"tag":148,"props":518,"children":519},{"style":290},[520],{"type":35,"value":521},"String",{"type":26,"tag":148,"props":523,"children":524},{"style":155},[525],{"type":35,"value":526},"> decoratedSupplier ",{"type":26,"tag":148,"props":528,"children":529},{"style":290},[530],{"type":35,"value":293},{"type":26,"tag":148,"props":532,"children":533},{"style":155},[534],{"type":35,"value":470},{"type":26,"tag":148,"props":536,"children":537},{"style":301},[538],{"type":35,"value":539},"decorateSupplier",{"type":26,"tag":148,"props":541,"children":542},{"style":155},[543],{"type":35,"value":544},"(circuitBreaker, () ",{"type":26,"tag":148,"props":546,"children":547},{"style":290},[548],{"type":35,"value":549},"->",{"type":26,"tag":148,"props":551,"children":552},{"style":155},[553],{"type":35,"value":554}," myService.",{"type":26,"tag":148,"props":556,"children":557},{"style":301},[558],{"type":35,"value":559},"remoteCall",{"type":26,"tag":148,"props":561,"children":562},{"style":155},[563],{"type":35,"value":564},"());\n",{"type":26,"tag":148,"props":566,"children":567},{"class":150,"line":172},[568],{"type":26,"tag":148,"props":569,"children":570},{"emptyLinePlaceholder":449},[571],{"type":35,"value":452},{"type":26,"tag":148,"props":573,"children":574},{"class":150,"line":199},[575,580,585],{"type":26,"tag":148,"props":576,"children":577},{"style":155},[578],{"type":35,"value":579},"Try.",{"type":26,"tag":148,"props":581,"children":582},{"style":301},[583],{"type":35,"value":584},"ofSupplier",{"type":26,"tag":148,"props":586,"children":587},{"style":155},[588],{"type":35,"value":589},"(decoratedSupplier)\n",{"type":26,"tag":148,"props":591,"children":592},{"class":150,"line":225},[593,597,602,607,611,616],{"type":26,"tag":148,"props":594,"children":595},{"style":155},[596],{"type":35,"value":317},{"type":26,"tag":148,"props":598,"children":599},{"style":301},[600],{"type":35,"value":601},"recover",{"type":26,"tag":148,"props":603,"children":604},{"style":155},[605],{"type":35,"value":606},"(throwable ",{"type":26,"tag":148,"props":608,"children":609},{"style":290},[610],{"type":35,"value":549},{"type":26,"tag":148,"props":612,"children":613},{"style":482},[614],{"type":35,"value":615}," \"Fallback response\"",{"type":26,"tag":148,"props":617,"children":618},{"style":155},[619],{"type":35,"value":338},{"type":26,"tag":148,"props":621,"children":622},{"class":150,"line":251},[623,627,632,637,641,646,651,655,660,665],{"type":26,"tag":148,"props":624,"children":625},{"style":155},[626],{"type":35,"value":317},{"type":26,"tag":148,"props":628,"children":629},{"style":301},[630],{"type":35,"value":631},"onSuccess",{"type":26,"tag":148,"props":633,"children":634},{"style":155},[635],{"type":35,"value":636},"(result ",{"type":26,"tag":148,"props":638,"children":639},{"style":290},[640],{"type":35,"value":549},{"type":26,"tag":148,"props":642,"children":643},{"style":155},[644],{"type":35,"value":645}," System.out.",{"type":26,"tag":148,"props":647,"children":648},{"style":301},[649],{"type":35,"value":650},"println",{"type":26,"tag":148,"props":652,"children":653},{"style":155},[654],{"type":35,"value":327},{"type":26,"tag":148,"props":656,"children":657},{"style":482},[658],{"type":35,"value":659},"\"Response: \"",{"type":26,"tag":148,"props":661,"children":662},{"style":290},[663],{"type":35,"value":664}," +",{"type":26,"tag":148,"props":666,"children":667},{"style":155},[668],{"type":35,"value":669}," result));\n",{"type":26,"tag":38,"props":671,"children":673},{"id":672},"monitoring-and-metrics",[674],{"type":35,"value":675},"Monitoring and Metrics",{"type":26,"tag":31,"props":677,"children":678},{},[679],{"type":35,"value":680},"Resilience4j provides built-in support for metrics and monitoring:",{"type":26,"tag":138,"props":682,"children":684},{"className":274,"code":683,"language":17,"meta":8,"style":8},"CircuitBreakerRegistry registry = CircuitBreakerRegistry.ofDefaults();\nregistry.getEventPublisher()\n    .onStateTransition(event -> System.out.println(event.getStateTransition()));\n",[685],{"type":26,"tag":15,"props":686,"children":687},{"__ignoreMap":8},[688,714,731],{"type":26,"tag":148,"props":689,"children":690},{"class":150,"line":151},[691,696,700,705,710],{"type":26,"tag":148,"props":692,"children":693},{"style":155},[694],{"type":35,"value":695},"CircuitBreakerRegistry registry ",{"type":26,"tag":148,"props":697,"children":698},{"style":290},[699],{"type":35,"value":293},{"type":26,"tag":148,"props":701,"children":702},{"style":155},[703],{"type":35,"value":704}," CircuitBreakerRegistry.",{"type":26,"tag":148,"props":706,"children":707},{"style":301},[708],{"type":35,"value":709},"ofDefaults",{"type":26,"tag":148,"props":711,"children":712},{"style":155},[713],{"type":35,"value":442},{"type":26,"tag":148,"props":715,"children":716},{"class":150,"line":172},[717,722,727],{"type":26,"tag":148,"props":718,"children":719},{"style":155},[720],{"type":35,"value":721},"registry.",{"type":26,"tag":148,"props":723,"children":724},{"style":301},[725],{"type":35,"value":726},"getEventPublisher",{"type":26,"tag":148,"props":728,"children":729},{"style":155},[730],{"type":35,"value":309},{"type":26,"tag":148,"props":732,"children":733},{"class":150,"line":199},[734,738,743,748,752,756,760,765,770],{"type":26,"tag":148,"props":735,"children":736},{"style":155},[737],{"type":35,"value":317},{"type":26,"tag":148,"props":739,"children":740},{"style":301},[741],{"type":35,"value":742},"onStateTransition",{"type":26,"tag":148,"props":744,"children":745},{"style":155},[746],{"type":35,"value":747},"(event ",{"type":26,"tag":148,"props":749,"children":750},{"style":290},[751],{"type":35,"value":549},{"type":26,"tag":148,"props":753,"children":754},{"style":155},[755],{"type":35,"value":645},{"type":26,"tag":148,"props":757,"children":758},{"style":301},[759],{"type":35,"value":650},{"type":26,"tag":148,"props":761,"children":762},{"style":155},[763],{"type":35,"value":764},"(event.",{"type":26,"tag":148,"props":766,"children":767},{"style":301},[768],{"type":35,"value":769},"getStateTransition",{"type":26,"tag":148,"props":771,"children":772},{"style":155},[773],{"type":35,"value":774},"()));\n",{"type":26,"tag":31,"props":776,"children":777},{},[778],{"type":35,"value":779},"Integrate with Prometheus, Grafana, or other observability tools for comprehensive monitoring.",{"type":26,"tag":38,"props":781,"children":783},{"id":782},"best-practices-for-circuit-breaking",[784],{"type":35,"value":785},"Best Practices for Circuit Breaking",{"type":26,"tag":50,"props":787,"children":788},{},[789,794,799,804],{"type":26,"tag":54,"props":790,"children":791},{},[792],{"type":35,"value":793},"Configure sensible thresholds to avoid premature circuit opening.",{"type":26,"tag":54,"props":795,"children":796},{},[797],{"type":35,"value":798},"Always define fallback mechanisms.",{"type":26,"tag":54,"props":800,"children":801},{},[802],{"type":35,"value":803},"Regularly monitor circuit breaker states and metrics.",{"type":26,"tag":54,"props":805,"children":806},{},[807],{"type":35,"value":808},"Test thoroughly to ensure reliability under failure conditions.",{"type":26,"tag":38,"props":810,"children":812},{"id":811},"conclusion",[813],{"type":35,"value":814},"Conclusion",{"type":26,"tag":31,"props":816,"children":817},{},[818],{"type":35,"value":819},"Implementing circuit breakers using Resilience4j significantly enhances the resilience of your Java-based distributed systems. This proactive approach ensures your systems gracefully handle failures, maintaining service availability and user satisfaction.",{"type":26,"tag":821,"props":822,"children":824},"h1",{"id":823},"further-reading",[825],{"type":35,"value":826},"Further Reading",{"type":26,"tag":50,"props":828,"children":829},{},[830,842,852],{"type":26,"tag":54,"props":831,"children":832},{},[833],{"type":26,"tag":834,"props":835,"children":839},"a",{"href":836,"rel":837},"https://resilience4j.readme.io/docs",[838],"nofollow",[840],{"type":35,"value":841},"Resilience4j Official Documentation",{"type":26,"tag":54,"props":843,"children":844},{},[845],{"type":26,"tag":834,"props":846,"children":849},{"href":847,"rel":848},"https://martinfowler.com/bliki/CircuitBreaker.html",[838],[850],{"type":35,"value":851},"Circuit Breaker Pattern by Martin Fowler",{"type":26,"tag":54,"props":853,"children":854},{},[855],{"type":26,"tag":834,"props":856,"children":859},{"href":857,"rel":858},"https://microservices.io/patterns/reliability/circuit-breaker.html",[838],[860],{"type":35,"value":861},"Microservices Patterns by Chris Richardson",{"type":26,"tag":863,"props":864,"children":865},"style",{},[866],{"type":35,"value":867},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}",{"title":8,"searchDepth":172,"depth":172,"links":869},[870,871,872,877,878,879],{"id":40,"depth":172,"text":43},{"id":92,"depth":172,"text":95},{"id":121,"depth":172,"text":124,"children":873},[874,875,876],{"id":128,"depth":199,"text":131},{"id":268,"depth":199,"text":271},{"id":493,"depth":199,"text":496},{"id":672,"depth":172,"text":675},{"id":782,"depth":172,"text":785},{"id":811,"depth":172,"text":814},"markdown","content:posts:circuit-breaking-resilience.md","content","posts/circuit-breaking-resilience.md","posts/circuit-breaking-resilience","md",1790510064667]