hystrix应用 博客_使用Hystrix DSL创建弹性骆驼应用程序
hystrix應(yīng)用 博客
Apache Camel是一個(gè)成熟的集成庫(kù)(到現(xiàn)在已有9年的歷史了),它實(shí)現(xiàn)了Enterprise Integration Patterns一書中的所有模式。 但是Camel不僅是EIP實(shí)現(xiàn)庫(kù),它還是一個(gè)不斷發(fā)展,添加新模式并適應(yīng)行業(yè)變化的現(xiàn)代框架。 除了每個(gè)版本中添加了數(shù)十個(gè)連接器之外,Camel還與Java語言新版本本身和其他Java框架提供的新功能緊密結(jié)合。 隨著時(shí)間的流逝,諸如SOA和ESB之類的某些架構(gòu)樣式逐漸失去吸引力,而諸如REST之類的新架構(gòu)樣式則使微服務(wù)受到歡迎。
為了使開發(fā)人員能夠利用這些新趨勢(shì)進(jìn)行集成,Camel通過添加諸如REST DSL之類的新DSL和諸如Circuit Breaker之類的新模式以及諸如Spring Boot之類的組件來做出響應(yīng)。 這還不是全部,我們還遠(yuǎn)遠(yuǎn)沒有完成。 借助Docker容器和Kubernetes等技術(shù),IT行業(yè)現(xiàn)在正以更快的速度向前發(fā)展,而Camel也在不斷發(fā)展以減輕開發(fā)人員的負(fù)擔(dān)。 要了解某種工具,您需要在Docker和Kubernetes上開發(fā)和運(yùn)行應(yīng)用程序,請(qǐng)查看Fabric8項(xiàng)目,特別是工具,例如Docker Maven插件,Kubernetes CDI擴(kuò)展,Kubernetes Java客戶端,針對(duì)Kubernetes的Arquilian測(cè)試等。大量有趣的技術(shù)將帶給您激動(dòng)人心的時(shí)代,下面讓我們看一下其中的一種:駱駝和基于Hystrix的斷路器。
兩座駱駝斷路器,該選擇哪一個(gè)?
兩年前,當(dāng)我第一次閱讀Michael Nygard的Release It時(shí) ,我無法停止在Camel中實(shí)現(xiàn)Circuit Breaker模式 。 通常,我會(huì)根據(jù)實(shí)際客戶的需求來貢獻(xiàn)自己的力量,但是斷路器模式是如此優(yōu)雅,我不得不這樣做。 為了以非介入方式實(shí)現(xiàn)它,我將其添加為Camel負(fù)載均衡器策略。 這很簡(jiǎn)單:
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"><route><from uri="direct:start"/><loadBalance><circuitBreaker threshold="2" halfOpenAfter="1000"><exception>MyCustomException</exception></circuitBreaker><to uri="mock:result"/></loadBalance></route> </camelContext>上面的DSL自我描述:如果模擬:結(jié)果端點(diǎn)拋出的MyCustomExceptions數(shù)量達(dá)到閾值數(shù)量,則CircuitBreaker進(jìn)入打開狀態(tài)并開始拒絕所有請(qǐng)求。 1000毫秒后,它將進(jìn)入halfOpenAfter狀態(tài),并且在此狀態(tài)下的第一個(gè)請(qǐng)求的結(jié)果將其下一個(gè)狀態(tài)定義為已關(guān)閉或已打開。 您可以想象這是CircuitBreker的最簡(jiǎn)單的實(shí)現(xiàn),但仍然有用。
從那時(shí)起,Microseservices體系結(jié)構(gòu)變得越來越流行,Circuit Breaker Pattern及其java實(shí)現(xiàn)Hystrix也是如此 。 勞爾·克里帕拉尼(RaúlKripalani)在某個(gè)時(shí)候開始在駱駝(Camel)實(shí)施Hystrix,并將所有基礎(chǔ)工作落實(shí)到位,但是隨著時(shí)間的流逝,它失去了動(dòng)力。 然后一次又一次地看到來自不同客戶的相同請(qǐng)求,我接下了繼電器并繼續(xù)進(jìn)行工作,并將Hystrix組件推到了Camel。 看到社區(qū)的反饋,它仍然沒有它應(yīng)有的優(yōu)雅。 然后, Claus介入并通過將Hystrix轉(zhuǎn)變?yōu)镋IP(而非組件)而使其成為Camel DSL的一部分。 那么現(xiàn)在在駱駝中創(chuàng)建基于Hystrix的斷路器是什么樣子呢?
public class ClientRoute extends RouteBuilder {@Overridepublic void configure() {from("timer:trigger?period=1s").log(" Client request: ${body}").hystrix().to("http://localhost:9090/service1")// use onFallback() to provide a repsonse message immediately: .transform().simple("Fallback ${body}")// use onFallbackViaNetwork() when there is a 2nd service call.onFallbackViaNetwork().to("http://localhost:7070/service2").end().log("Client response: ${body}");} }在上面的示例中,您幾乎看不到斷路器的所有可用選項(xiàng),要查看所有這些選項(xiàng),請(qǐng)檢出官方文檔并嘗試放置在示例中的 Claus應(yīng)用程序。
根據(jù)此示例,您可能認(rèn)為Hystrix是Camel核心的一部分,但事實(shí)并非如此。 駱駝核心仍然是這樣,沒有第三方庫(kù)的依賴。 如果要使用基于Hystrix的斷路器,則需要像其他任何非核心組件一樣,將camel-hystrix依賴項(xiàng)添加到依賴項(xiàng)中,并使其在運(yùn)行時(shí)可用。
快速失敗,后備,隔板,超時(shí)等
Hystrix庫(kù)實(shí)現(xiàn)的不僅僅是斷路器模式。 它也可以進(jìn)行批量處理,請(qǐng)求緩存,超時(shí),請(qǐng)求折疊等。Camel中的實(shí)現(xiàn)不支持請(qǐng)求折疊和緩存,因?yàn)檫@些已經(jīng)使用Camel中可用的其他模式和組件完成了。 Camel中的請(qǐng)求折疊可以使用Aggregator EIP完成,而緩存可以使用Redis,Inifinspan,Hazelcast等緩存組件完成。Camel中的Hystrix DSL提供了Hystrix支持的大約30種配置選項(xiàng),還通過JMX和/或公開了指標(biāo)Hystrix儀表板的 REST。
最后一點(diǎn),不要忘記創(chuàng)建一個(gè)真正的彈性應(yīng)用程序,您需要的不僅僅是Hystrix。 Hystrix將在線程池級(jí)別進(jìn)行批量處理,但是如果您不在進(jìn)程,主機(jī)和物理計(jì)算機(jī)級(jí)別應(yīng)用相同的原理,那還不夠。 要?jiǎng)?chuàng)建一個(gè)可恢復(fù)的分布式系統(tǒng),您還需要使用Retry,Throttleing,Timeout…和其他好的技巧,我在Camel Design Patterns一書中已經(jīng)描述了其中的一些技巧。
要了解新模式,請(qǐng)查看示例 ,然后開始使用Hystrix保護(hù)基于Camel的微服務(wù)。
翻譯自: https://www.javacodegeeks.com/2016/06/create-resilient-camel-applications-hystrix-dsl.html
hystrix應(yīng)用 博客
總結(jié)
以上是生活随笔為你收集整理的hystrix应用 博客_使用Hystrix DSL创建弹性骆驼应用程序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java实现资源监视器_实现Java监视
- 下一篇: 口罩备案号查询平台(口罩备案号)