Apache Camel中的断路器模式
駱駝通常在分布式環(huán)境中用于訪問遠(yuǎn)程資源。 遠(yuǎn)程服務(wù)可能由于各種原因和期間而失敗。 對(duì)于短時(shí)間后暫時(shí)不可用且可恢復(fù)的服務(wù),重試策略可能會(huì)有所幫助。 但是某些服務(wù)可能會(huì)失敗或掛起更長時(shí)間,從而使調(diào)用應(yīng)用程序無響應(yīng)且速度緩慢。 防止級(jí)聯(lián)故障和關(guān)鍵資源耗盡的一個(gè)好策略是Michael Nygard在Release It!中描述的斷路器模式。 書。
斷路器是一種有狀態(tài)模式,用于包裝容易發(fā)生故障的資源并監(jiān)視錯(cuò)誤。 最初,斷路器處于關(guān)閉狀態(tài) ,并將所有調(diào)用傳遞給包裝的資源。 當(dāng)故障達(dá)到某個(gè)閾值時(shí),電路將轉(zhuǎn)為打開狀態(tài) ,在此狀態(tài)下,錯(cuò)誤將錯(cuò)誤返回給調(diào)用方,而沒有實(shí)際調(diào)用包裝的資源。 這樣可以防止已經(jīng)發(fā)生故障的資源過載。 在這種狀態(tài)下,我們需要一種機(jī)制來檢測(cè)故障是否已經(jīng)結(jié)束并開始調(diào)用受保護(hù)的資源。 這就是所謂的半開狀態(tài)的第三個(gè)狀態(tài)。 在上次故障之后的一定時(shí)間后達(dá)到此狀態(tài)。 在這種狀態(tài)下,調(diào)用將傳遞到受保護(hù)的資源,但是調(diào)用的結(jié)果很重要。 如果調(diào)用成功,則假定受保護(hù)的資源已恢復(fù)并且電路進(jìn)入關(guān)閉狀態(tài) ,如果調(diào)用失敗,則重置超時(shí),并將電路移回到拒絕所有調(diào)用的打開狀態(tài) 。 這是Martin Fowler 帖子中Circuit Breaker的狀態(tài)圖:
駱駝如何實(shí)現(xiàn)斷路器?
Camel的最新快照版本提供了Circuit Breaker,作為負(fù)載均衡器策略。
Camel負(fù)載平衡器已經(jīng)具有用于Round Robin,Random,Failover等的策略,現(xiàn)在還具有CircuiBreaker策略。
這是一個(gè)示例負(fù)載均衡器,它使用具有2個(gè)錯(cuò)誤的閾值和1秒的HalfOpenAfter超時(shí)閾值的斷路器策略。 還要注意,此策略僅適用于由MyCustomException引起的錯(cuò)誤
new RouteBuilder() {public void configure() {from("direct:start").loadBalance().circuitBreaker(2, 1000L, MyCustomException.class).to("mock:result");} };這是使用Spring XML DSL的相同示例:
<route><from uri="direct:start"/><loadBalance><circuitBreaker threshold="2" halfOpenAfter="1000"><exception>MyCustomException</exception></circuitBreaker><to uri="mock:result"/></loadBalance> </route>翻譯自: https://www.javacodegeeks.com/2014/04/circuit-breaker-pattern-in-apache-camel.html
總結(jié)
以上是生活随笔為你收集整理的Apache Camel中的断路器模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 清炖蘑菇汤做法 清炖蘑菇汤的烹饪方法
- 下一篇: JDK 8中方便的新地图默认方法