Apache Camel入門

在先前的博文中,我們了解了企業集成模式(EIP)。 現在,在這篇文章中,我們將研究實現這些模式的Apache Camel框架。

關于駱駝:

Apache Camel是一個開放源代碼項目,已有將近5年的歷史,并且擁有大量的用戶社區。 該框架的核心是一個引擎,它負責中介工作并將消息從一個系統路由到另一個系統。 在外圍,它具有大量的組件,可以與使用各種協議(例如FTP,RPC,Webservices,HTTP,JMS,REST等)的系統進行接口。 它還提供了Java,Spring和Scala中易于理解的領域特定語言。

現在讓我們開始使用Apache駱駝。 我們將使用maven設置一個項目,為所需的駱駝庫添加依賴項,并使用Java和Spring DSL編寫示例。

考慮一個接受兩種類型訂單的系統。 小部件和小工具。 訂單到達JMS隊列并以XML格式指定。 小工具清單會輪詢文件目錄中的傳入訂單,而小部件清單會在隊列上偵聽。 我們對所有到達的訂單運行XPath,并確定它們是屬于小部件還是小工具庫存。 下圖描述了我們的用例:

首先,只需在目錄中打開命令行窗口,然后鍵入mvn archetype:generate

"c:\myprojects>mvn archetype:generate

假設我們的路徑中有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粘貼在該要點條目上。

現在,讓我們的駱駝路線編碼,該路線將輪詢JMS隊列,應用XPath找出該訂單是用于小工具清單還是窗口小部件清單,然后將其路由到FTP目錄或JMS隊列。

到達我們系統的訂單具有以下結構

<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”,然后轉發至FTP目錄,否則轉發至隊列。

現在讓我們對路由進行編碼,為此,需要擴展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");

這樣做之后,現在讓我們分析以上路線。 上面的關鍵字構成了駱駝EIP DSL; 該路線的目的總結如下:

from :這表示從端點獲取消息,即consume ,在我們的情況下,這恰好是一個隊列。
選擇 :這是一個謂詞,在這里我們應用一個簡單的規則。
xpath :這表示將xpath應用于當前消息,xpath的結果為布爾值。 :這告訴駱駝將消息放在端點上,即產生

每個關鍵字都可以使用一些參數來工作。 例如,from采取端點參數來消費消息,在本例中,它是JMS(activemq)代理上的隊列。

注意,Camel會自動為您進行類型轉換,在上述路由中,在應用XPath之前,消息對象已轉換為DOM。

我們還將main方法放入此類本身,以快速對其進行測試。 在main方法內部,我們需要實例化一個Camel上下文,該上下文將承載此路由,并且在啟動上下文時,Camel將設置路由并開始偵聽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可以快速構建和編寫集成應用程序。

在這個gist條目中檢查展示Camel路由的Spring應用程序上下文。將該上下文文件放在META-INF / spring文件夾中,即在我們的maven項目中,它位于/ src / main / resources / META-INF / spring文件夾下。

在頂部,我們導入了Camel的Spring命名空間,該命名空間允許在Spring的應用程序上下文中定義Camel路由,此外,在我們的pom文件中,我們需要添加依賴項以包含Spring bean的依賴關系,以在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文件夾保存在類路徑下。 檢查顯示所需代碼的要點條目。 通過這個示例,我們實現了基于內容的路由器模式,該模式檢查消息的內容以進行路由決策。

參考:來自NS.Infra博客的JCG合作伙伴 Abhishek Jain的Apache Camel入門 。

翻譯自: https://www.javacodegeeks.com/2012/12/getting-started-with-apache-camel.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370082.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370082.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370082.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

css 寫打印樣式問題

&#xff08;1&#xff09;背景顏色打印不出來問題解決方法 background樣式要加上 !important&#xff1b;color樣式要加上 !important&#xff1b;-webkit-print-color-adjust: exact;然后記得瀏覽器打印設置里面要在“打印背景圖形”前面打勾。 -webkit-print-color-adjust:…

android studio smssdk,SMSSDK for Android 配置

1.集成之前先要申請Mob的appkey與appsecret2.在Mob官網下載最新SDK&#xff0c;解壓后會看到以下目錄結構&#xff1a;SMSSDK下存放的是短信SDK的全部內容。3.在android studio中加入SMS的第三方庫AS版本的SMSSDK目錄下包含以下內容&#xff1a;MobCommons.jar&#xff1a;Mob …

linux后臺不掛斷運行 nohup命令

//后臺常在 退出終端仍然運行 nohup python pyredis.py & nohup輸出重定向到my.log nohup command > my.log 2>&1 &轉載于:https://www.cnblogs.com/plxm/p/8136833.html

Ubuntu 16.04安裝微信

微信沒有出Linux的版本&#xff0c;但是可以通過以下方式解決&#xff1a; 1、使用網頁版&#xff0c;除了沒有公眾號之后&#xff0c;一切都沒問題&#xff0c;包括傳文件等。 網頁登錄地址&#xff1a;https://wx.qq.com/ 2、使用第三方版本&#xff0c;只不過這個是桌面應用…

navision系統和sap區別_SAP那些事-實戰篇-89-淺談金稅接口方案

以前金稅接口這塊一直是銷售顧問在做&#xff0c;雖然和財務相關&#xff0c;也沒有怎么關注。這次項目把金稅接口分到了財務模塊&#xff0c;結果遇到了一些問題&#xff0c;趁此機會把這塊總結一下方案&#xff0c;供各位看官參考。方案1&#xff1a; 文本方案&#xff0c;這…

不變性的來龍去脈

因此&#xff0c;在我的第一篇文章中&#xff0c;我談到了一些構建器模式&#xff0c;并提到了一個非常強大但卻被忽視的概念&#xff1a;不變性。 什么是不可變類&#xff1f; 這只是一個其實例無法修改的類。 類屬性的每個值都在其聲明或其構造函數中設置&#xff0c;并在對…

JavaScript總結(3)

第3章 獲取用戶的輸入 &#xff1c;script&#xff1e;10 intAprompt("請輸入第一個數字","");11 intBprompt("請輸入第二個數字",27);默認是2712 document.write("你輸入的第一個數字是"intA);13 document.write("&#xff1c;…

css書寫規范

在書寫css樣式的時候總是無意中就寫亂了&#xff0c;無論是命名或者是樣式的書寫順序&#xff0c;這里做一個總結&#xff0c;提醒自己在書寫css的時候時刻注意&#xff0c;大家可以參考哈。 1. 樣式屬性順序 單個樣式規則下的屬性在書寫時&#xff0c;應按功能進行分組&…

android 協程,關于android:Kotlin協程實現原理SuspendCoroutineContext

明天咱們來聊聊Kotlin的協程Coroutine。如果你還沒有接觸過協程&#xff0c;舉薦你先瀏覽這篇入門級文章What? 你還不曉得Kotlin Coroutine?如果你曾經接觸過協程&#xff0c;置信你都有過以下幾個疑難&#xff1a;協程到底是個什么貨色&#xff1f;協程的suspend有什么作用&…

清空easyui checkbox選中項

$(#dg).datagrid(unselectAll);轉載于:https://www.cnblogs.com/douhuan/p/7116744.html

python 編輯excel需要什么包_Python 中操作EXCEL表格的包

今天&#xff0c;馬云爸爸又來貢獻金句了&#xff0c;比王健林公公一億一個小目標還高&#xff0c;“一個月掙一二十個億很難受&#xff01;&#xff01;&#xff01;”&#xff0c;作為在傳統企業主要為電商部門提供數據分析的數據分析師&#xff0c;體驗太深刻了。雙11前后&a…

用Java處理大文件

最近&#xff0c;我不得不處理一組包含逐筆歷史匯率市場數據的文件&#xff0c;并很快意識到使用傳統的InputStream都無法將它們讀取到內存中&#xff0c;因為每個文件的大小都超過4 GB。 Emacs甚至無法打開它們。 在這種特殊情況下&#xff0c;我可以編寫一個簡單的bash腳本&…

java IO(一):File類

1.File類簡介 File類位于java.io包中。它面向文件層次級別操作、查看文件&#xff0c;而字節流、字符流操作數據時顯然比之更底層。 學習File類包括以下幾個重點&#xff1a;文件路徑、文件分隔符、創建文件(目錄)、刪除文件(目錄)、查看文件內容(輸出目錄內文件)、判斷文件(是…

android listview 開發,android開發之ListView實現

今天又初步學習了一下ListView控件&#xff0c;看看效果如下&#xff1a;LisViewActivity.java源碼&#xff1a;package com.jinhoward.UI_listview;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.os.Bundl…

input ios問題 小程序_微信小程序開發常見問題匯總

原標題&#xff1a;微信小程序開發常見問題匯總1、域名必須是https非https的域名不被微信小程序允許。2、input組件placeholder字體顏色卸載placeholder-class里面的color并不生效&#xff0c;需要寫在placeholder-style里面就可以了。3、wx.navigateTo無法跳轉到帶tabbar的頁面…

https://github.com/

https://github.com/ qq郵箱 轉載于:https://www.cnblogs.com/chang1/p/7133251.html

Less 的用法

1. node.js node.js是一個前端的框架 自帶一個包管理工具npm node.js 的安裝 官網&#xff1a;http://nodejs.cn/ 在命令行檢驗是否安裝成功 切換到項目目錄&#xff0c;初始化了一個package.json文件 安裝與卸載jQuery包&#xff08;例子&#xff09; 安裝 卸載 安裝淘寶…

淺談springboot整合ganymed-ssh2遠程訪問linux

環境介紹 技術棧 springbootmybatis-plusmysqlganymed-ssh2 軟件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis-plus 3.5.3.2 SSH(遠程連接工具)連接原理&#xff1a;ssh服務是一個守護進程(demon)&#xff0c;系統后臺監聽客戶…

優化Neo4j Cypher查詢

上周&#xff0c;我花了很多時間嘗試使用實時系統中的數據來優化大約20個執行失敗的Cypher查詢&#xff08;36866ms至155575ms&#xff09;。 經過一番嘗試和錯誤&#xff0c;以及來自Michael的大量投入&#xff0c;我能夠大致確定對查詢進行哪些操作才能使它們性能更好-最后&a…

python 多文件知識

對于一個大型的項目&#xff0c;會存在很多個py文件&#xff0c;本文記錄與多文件有關的內容。 1. python 如何在一個.py文件中調用另一個.py文件的類 如果是在同一個 module中(也就是同一個py 文件里),直接用就可以如果在不同的module里,例如a.py里有 class A:b.py 里有 class…