使用Hystrix DSL创建弹性骆驼应用程序
Apache Camel是一個成熟的集成庫(到現在已有9年的歷史了),它實現了Enterprise Integration Patterns一書中的所有模式。 但是Camel不僅是EIP實現庫,它還是一個不斷發展,添加新模式并適應行業變化的現代框架。 除了在每個版本中添加數十個連接器之外,Camel還與Java語言新版本本身和其他Java框架提供的新功能緊密結合。 隨著時間的流逝,諸如SOA和ESB之類的某些架構樣式逐漸失去吸引力,而諸如REST之類的新架構樣式使微服務變得流行。
為了使開發人員能夠利用這些新趨勢進行集成,Camel通過添加新的DSL(例如REST DSL)和新模式(例如Circuit Breaker)以及組件(例如Spring Boot)來做出響應。 這還不是全部,我們還遠遠沒有完成。 借助Docker容器和Kubernetes之類的技術,IT行業現在的發展速度甚至更快,Camel也正在不斷發展以減輕開發人員的負擔。 要了解某種工具,您需要在Docker和Kubernetes上開發和運行應用程序,請查看Fabric8項目,特別是工具,例如Docker Maven插件,Kubernetes CDI擴展,Kubernetes Java客戶端,針對Kubernetes的Arquilian測試等。大量先進技術帶來的激動人心的時代即將來臨,讓我們看一下其中的一種:駱駝和基于Hystrix的斷路器。
兩個駱駝斷路器,該選擇哪個?
兩年前,當我第一次閱讀Michael Nygard的Release It時 ,我無法停止在Camel中實現Circuit Breaker模式 。 通常,我會根據真正的客戶需求來貢獻自己的力量,但是斷路器模式是如此優雅,我不得不這樣做。 為了以非介入方式實現它,我將其添加為Camel負載均衡器策略。 這很簡單:
<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是自我描述的:如果模擬:結果端點拋出的MyCustomExceptions數量達到閾值,CircuitBreaker進入打開狀態并開始拒絕所有請求。 1000毫秒后,它將進入HalfOpenAfter狀態,并且在此狀態下的第一個請求的結果將其下一個狀態定義為已關閉或已打開。 您可以想象這是CircuitBreker的最簡單的實現,但仍然有用。
從那時起,Microseservices體系結構變得越來越流行,Circuit Breaker Pattern及其java實現Hystrix也是如此 。 勞爾·克里帕拉尼(RaúlKripalani)在某個時候開始在駱駝(Camel)實施Hystrix,并將所有基礎工作都準備就緒,但隨著時間的流逝,它失去了動力。 然后一次又一次地看到來自不同客戶的相同請求,我接下了繼電器并繼續工作,并將Hystrix組件推到了Camel。 看到社區的反饋,它仍然沒有它應有的優雅。 然后, Claus介入并通過將Hystrix轉變為EIP(而不是組件)而使其成為駱駝DSL的一部分。 那么,現在在駱駝中創建基于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}");} }在上面的示例中,您只能看到斷路器的少數可用選項,要查看所有這些選項,請檢出官方文檔并試用放置在示例中的 Claus應用程序。
根據此示例,您可能認為Hystrix是Camel核心的一部分,但事實并非如此。 駱駝核心仍然是這樣,沒有第三方庫的依賴。 如果要使用基于Hystrix的斷路器,則需要像其他任何非核心組件一樣,將camel-hystrix依賴項添加到依賴項中,并使其在運行時可用。
快速失敗,后備,隔板,超時等
Hystrix庫實現的不僅僅是斷路器模式。 它也可以進行批量處理,請求緩存,超時,請求折疊等。Camel中的實現不支持請求折疊和緩存,因為這些已經使用Camel中可用的其他模式和組件完成了。 Camel中的請求折疊可以使用Aggregator EIP完成,而緩存可以使用Redis,Inifinspan,Hazelcast等緩存組件完成。Camel中的Hystrix DSL提供了Hystrix支持的大約30種配置選項,還通過JMX和/或公開了指標用于Hystrix儀表板的 REST。
最后一點,不要忘記創建一個真正的彈性應用程序,您需要的不僅僅是Hystrix。 Hystrix將在線程池級別進行批量處理,但是如果您不在進程,主機和物理計算機級別應用相同的原理,那還不夠。 要創建一個可恢復的分布式系統,您還需要使用Retry,Throttleing,Timeout…和其他好的技巧,我在Camel Design Patterns一書中已經描述了其中的一些技巧。
要了解新模式,請查看示例 ,然后開始使用Hystrix保護基于Camel的微服務。
翻譯自: https://www.javacodegeeks.com/2016/06/create-resilient-camel-applications-hystrix-dsl.html
總結
以上是生活随笔為你收集整理的使用Hystrix DSL创建弹性骆驼应用程序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: klf是什么意思 klf是哪种方言的发音
- 下一篇: 食品检验员证书怎么考 食品检验员证书如何