适用于微服务架构的Apache Camel
在知道微服務架構被稱為之前,我一直在使用它們。 我曾經使用過由隔離模塊組成的管道應用程序,這些模塊通過隊列相互交互。 從那時起,許多(前)ThoughtWorks專家討論了微服務。 首先是 Fred George, 然后是 James Lewis,最后是Martin Fowler, 寫了關于微服務的博客 ,這使它成為下一個流行語,因此每個公司都希望很少有微服務。 如今有#主題標簽,認可,喜歡,培訓,甚至是為期2天的會議 。 我讀和聽有關微服務架構的內容越多,我就越了解Apache Camel(及其周圍的相關項目)如何完全適合這種應用程序樣式。 在本文中,我們將了解Apache Camel框架如何幫助我們輕松地用Java創建微服務風格的應用程序。
微服務特征
微服務中沒有什么新東西。 如此長時間以來,已經設計并實現了許多應用程序。 微服務只是一個新術語,描述了具有某些特征并遵循某些原則的軟件系統樣式。 它是一種體系結構樣式,其中應用程序或軟件系統由單獨的獨立服務組成,這些獨立服務使用輕量級協議以基于事件的方式進行通信。 與TDD可以幫助我們創建分離的單一職責類一樣,微服務原理也可以指導我們在系統級別創建簡單的應用程序。 在這里,我們不會討論這種架構的原理和特性,也不會爭論它是在實踐中實現SOA的方式還是在應用程序設計中采用全新的方法,而是探討用于實現微服務的最常見實踐以及Apache Camel如何實現幫助我們在實踐中實現目標。 還沒有確切的列表,但是如果您閱讀或觀看上面發布的視頻,您會發現以下是創建微服務的非常常見的做法:
駱駝應用本來就很小。 帶有錯誤處理和輔助bean路徑的駱駝上下文大約為100 LOC。 借助Camel DSL和URI提取端點的能力,可以通過HTTP或JMS接收事件,將其編組,持久化并發送回一個響應,大約為50 LOC。 它足夠小,可以端到端進行測試,重寫甚至扔掉而不會感到re悔。
確保跨異構系統的交易行為并非易事,但Camel具有強大的交易能力。 Camel的端點可以參與事務,事務處理的路線和錯誤處理程序,冪等的使用者和補償行為,所有這些都可以幫助開發人員輕松創建具有事務行為的服務。
有了Camel,您就可以輕松獲得OOTB。 默認情況下,每個Camel應用程序都會收集整個應用程序,單個路由,端點等的JMX統計信息。它將告訴您成功完成了多少消息,失敗了多少,失敗的地方等等。這不是只讀的API,JMX允許還可以在運行時更新和調整應用程序,因此基于這些統計信息,您可以使用相同的API來調整應用程序。 還可以使用jConsole,VisualVM,Hyperic HQ等工具訪問信息,這些信息可以使用Jolokia通過HTTP公開,也可以輸入到名為hawtio的出色Web UI中。
如果OOTB可用的功能不符合您的自定義要求,則存在多個擴展點,例如nagios,jmx,amazon cloudwatch和新的指標組件,或者將事件通知程序用于自定義事件。
登錄消息傳遞應用程序是另一個挑戰,但是Camel的MDC日志記錄與吞吐量記錄器相結合,可以輕松地跟蹤單個消息或獲取聚合統計信息作為日志記錄輸出的一部分。
駱駝也有很多有用的工具和模式來應對這些情況。 死信通道可以確保在失敗的情況下不會丟失消息,重試策略可以使用自定義退避方法和避免沖突功能,針對某些錯誤情況重試發送消息兩次。 支持各種模式的負載均衡器, 斷路器 ,故障轉移和其他策略,限制某些端點不會過載的Throttler,Detour,Sampler等模式在各種故障場景中都需要。 因此,為什么不使用它們而不是在每次服務中重新發明輪子。
使用DSL創建Camel應用程序時,我們要做的就是定義消息流并配置各種端點和應用程序的其他特征。 因此,駱駝應用程序可以通過設計進行高度配置。 使用屬性組件將所有各種選項外部化后,就可以為應用程序配置不同的期望值并重新部署,而完全不必動用實際的源代碼。 Camel的可配置性很強,您可以更改另一個端點(例如,用JMS替換HTTP端點),而無需更改我們接下來將介紹的應用程序代碼。
駱駝偏愛任何東西。 它具有HTTP支持,沒有其他框架。 它具有異步Http,GAE URL提取服務,Apache HTTP客戶端,Jetty,Netty,Servlet,Restlet,CXF的組件以及用于序列化/反序列化消息的多種數據格式 。 另外,最近添加的Rest DSL使REST在Camel世界中成為頭等公民,并且只需創建很多這樣的服務即可。 至于排隊支持,OOTB有用于JMS,ActiveMQ,ZeroMQ,Amazon SQS,Amazon SNS,AMQP,Kestrel,Kafka,Stomp的連接器。
總結:微服務沒有嚴格定義,這就是美。 這是一種實現SOA的輕量級樣式。 Apache Camel也是如此。 它不是功能齊全的ESB,但可以作為JBoss Fuse的一部分。 它不是嚴格定義的規范驅動的項目,而是可以工作并且開發人員喜歡它的輕量級工具。
引用
翻譯自: https://www.javacodegeeks.com/2014/09/apache-camel-for-micro-service-architectures.html
總結
以上是生活随笔為你收集整理的适用于微服务架构的Apache Camel的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电脑突然没声音怎么办电脑没声音了 如何恢
- 下一篇: 即时大数据流处理=即时风暴