Apache Camel入门
在先前的博文中,我們了解了企業(yè)集成模式(EIP)。 現(xiàn)在,在這篇文章中,我們將研究實現(xiàn)這些模式的Apache Camel框架。
關(guān)于駱駝:
Apache Camel是一個開放源代碼項目,已有將近5年的歷史,并且擁有大量的用戶社區(qū)。 該框架的核心是一個引擎,它負責中介工作并將消息從一個系統(tǒng)路由到另一個系統(tǒng)。 在外圍,它具有大量的組件,可以與使用各種協(xié)議(例如FTP,RPC,Webservices,HTTP,JMS,REST等)的系統(tǒng)進行接口。 它還提供了Java,Spring和Scala中易于理解的領(lǐng)域特定語言。
現(xiàn)在讓我們開始使用Apache駱駝。 我們將使用maven設(shè)置一個項目,為所需的駱駝庫添加依賴項,并使用Java和Spring DSL編寫示例。
考慮一個接受兩種類型訂單的系統(tǒng)。 小部件和小工具。 訂單到達JMS隊列并以XML格式指定。 小工具清單會輪詢文件目錄中的傳入訂單,而小部件清單會在隊列上偵聽。 我們對所有到達的訂單運行XPath,并確定它們是屬于小部件還是小工具庫存。 下圖描述了我們的用例:
首先,只需在目錄中打開命令行窗口,然后鍵入mvn archetype:generate
"c:\myprojects>mvn archetype:generate假設(shè)我們的路徑中有maven 2+和jdk 1.6版本,同樣要運行此示例,我們需要一個activemq代理。
我們將在pom中添加以下依賴項
org.apache.camel : camel-core : 2.10.1 - Lib containing Camel engineorg.apache.camel : camel-ftp : 2.10.1 - Camel's ftp componentorg.apache.activemq : activemq-camel : 5.6.0 org.apache.activemq : activemq-pool : 5.6.0 - Libs required to integrate camel with activemqlog4j : log4j : 1.2.16 org.slf4j : slf4j-log4j12 : 1.6.4 - Libs for logging完整的pom.xml粘貼在該要點條目上。
現(xiàn)在,讓我們的駱駝路線編碼,該路線將輪詢JMS隊列,應用XPath找出該訂單是用于小工具清單還是窗口小部件清單,然后將其路由到FTP目錄或JMS隊列。
到達我們系統(tǒng)的訂單具有以下結(jié)構(gòu)
<xml version="1.0" encoding="UTF-8"> <order><product>gadget</product><lineitems><item>cdplayer</item><qty>2</qty></lineitems><lineitems><item>ipod-nano</item><qty>1</qty></lineitems> </order>product元素的值指定是gadget還是小部件訂單。 因此,在訂單的XPath下方應用將使我們決定將該消息路由到的位置。/order/product=“ gadget”,然后轉(zhuǎn)發(fā)至FTP目錄,否則轉(zhuǎn)發(fā)至隊列。
現(xiàn)在讓我們對路由進行編碼,為此,需要擴展RouteBuilder(org.apache.camel.builder.RouteBuilder)類并覆蓋它的configure方法。 我們將類命名為JavaDSLMain,并將以下代碼放入其configure方法中:
from("activemq:queue:NewOrders?brokerURL=tcp://192.168.64.144:61616").choice().when(xpath("/order/product = 'gadget'")).to("activemq:queue:GadgetOrders?brokerURL=tcp://192.168.64.144:61616").otherwise().to("ftp://192.168.101.3/camel-demo?username=admin&password=admin&binary=true");這樣做之后,現(xiàn)在讓我們分析以上路線。 上面的關(guān)鍵字構(gòu)成了駱駝EIP DSL; 該路線的目的總結(jié)如下:
from :這表示從端點獲取消息,即consume ,在我們的情況下,這恰好是一個隊列。
選擇 :這是一個謂詞,在這里我們應用一個簡單的規(guī)則。
xpath :這表示將xpath應用于當前消息,xpath的結(jié)果為布爾值。 到 :這告訴駱駝將消息放在端點上,即產(chǎn)生 。
每個關(guān)鍵字都可以使用一些參數(shù)來工作。 例如,from采取端點參數(shù)來消費消息,在本例中,它是JMS(activemq)代理上的隊列。
注意,Camel會自動為您進行類型轉(zhuǎn)換,在上述路由中,在應用XPath之前,消息對象已轉(zhuǎn)換為DOM。
我們還將main方法放入此類本身,以快速對其進行測試。 在main方法內(nèi)部,我們需要實例化一個Camel上下文,該上下文將承載此路由,并且在啟動上下文時,Camel將設(shè)置路由并開始偵聽NewOrders隊列。
main方法中包含的代碼如下:
CamelContext camelContext = new DefaultCamelContext(); camelContext.addRoutes(new JavaDSLMain()); camelContext.start(); /* wait indefinitely */ Object obj = new Object(); synchronized (obj) { obj.wait(); }查看此要點條目以獲取完整的代碼清單。
使用Camel的另一種方法是使用Spring,Camel路由進入Spring應用程序上下文文件。 我們只使用XML來快速定義路由,而不是編寫Java代碼。 為此,我們需要在Spring上下文文件中導入Camel名稱空間并使用
諸如Spring工具套件之類的IDE可以快速構(gòu)建和編寫集成應用程序。
在這個gist條目中檢查展示Camel路由的Spring應用程序上下文。將該上下文文件放在META-INF / spring文件夾中,即在我們的maven項目中,它位于/ src / main / resources / META-INF / spring文件夾下。
在頂部,我們導入了Camel的Spring命名空間,該命名空間允許在Spring的應用程序上下文中定義Camel路由,此外,在我們的pom文件中,我們需要添加依賴項以包含Spring bean的依賴關(guān)系,以在Spring中識別和實例化Camel引擎。 在下面添加以包括對Spring的Camel支持。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-spring</artifactId> <version>2.10.1</version></dependency> Camel提供了一個幫助程序類(org.apache.camel.spring.Main),它可以掃描保存在下面的所有Spring應用程序上下文文件。
META-INF / spring文件夾保存在類路徑下。 檢查顯示所需代碼的要點條目。 通過這個示例,我們實現(xiàn)了基于內(nèi)容的路由器模式,該模式檢查消息的內(nèi)容以進行路由決策。
參考:來自NS.Infra博客的JCG合作伙伴 Abhishek Jain的Apache Camel入門 。
翻譯自: https://www.javacodegeeks.com/2012/12/getting-started-with-apache-camel.html
總結(jié)
以上是生活随笔為你收集整理的Apache Camel入门的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 该文件没有与之关联的程序怎么办?(Win
- 下一篇: 不变性的来龙去脉