集成框架比較– Spring集成,Mule ESB或Apache Camel

公司之間的數據交換增加了很多。 必須集成的應用程序數量也增加了。 這些接口使用不同的技術,協議和數據格式。 但是,這些應用程序的集成應以標準化的方式建模,有效實現并由自動測試支持

JVM環境中提供了三個可滿足這些要求的集成框架: Spring Integration,Mule ESB和Apache Camel 。 它們實現了眾所周知的企業集成模式(EIP, http://www.eaipatterns.com ),因此提供了標準化的,特定于領域的語言來集成應用程序。

這些集成框架幾乎可以在JVM環境中的每個集成項目中使用,無論使用哪種技術,傳輸協議或數據格式。 所有集成項目都可以以一致的方式實現,而無需冗余的樣板代碼。
本文比較了這三種選擇,并討論了它們的優缺點。 如果您想知道何時使用更強大的企業服務總線(ESB)而不是這些輕量級集成框架之一,那么您應該閱讀以下博客文章: http : //www.kai-waehner.de/blog/2011 / 06/02 / when-to-use-apache-camel / (說明了何時使用Apache Camel,但標題也可能是“何時使用輕量級集成框架”)。

比較標準

可以使用幾個標準來比較這三個集成框架:

  • 開源的
  • 基本概念/架構
  • 可測性
  • 部署方式
  • 人氣度
  • 商業支持
  • IDE支持
  • 錯誤處理
  • 監控方式
  • 企業準備
  • 領域特定語言(DSL)
  • 接口,技術和協議的組件數
  • 可擴展性

相似之處

這三個框架都有很多相似之處。 因此,上述許多比較標準都是均勻的! 所有這些都實現了EIP,并提供了一致的模型和消息傳遞體系結構以集成多種技術 。 無論您必須使用哪種技術,都始終以相同的方式進行操作,即相同的語法,相同的API,相同的自動測試。 唯一的區別是每個端點的配置(例如,JMS需要隊列名稱,而JDBC需要數據庫連接URL)。 IMO,這是最重要的功能。 每個框架使用不同的名稱,但是想法是相同的。 例如,“駱駝路徑”等效于“ M流”,“駱駝組件”在Spring Integration中稱為“適配器”。
此外,還存在其他一些與重量級ESB不同的相似之處。 您只需要在類路徑中添加一些庫即可。 因此,您可以在JVM環境中的任何地方使用每個框架。 無論您的項目是Java SE獨立應用程序,還是要將其部署到Web容器(例如Tomcat),JEE應用程序服務器(例如Glassfish),OSGi容器甚至云中,都可以。 只需添加庫,進行一些簡單的配置,即可完成。 然后,您可以開始實施集成工作(路由,轉換等)。

這三個框架都是開源的,并提供熟悉的公共功能,例如源代碼,論壇,郵件列表,問題跟蹤和對新功能的投票。 好的社區會編寫文檔,博客和教程(IMO Apache Camel擁有最引人注目的社區)。 只有已發行書籍的數量對這三者都可能更好。 可以通過不同的供應商獲得商業支持:

  • Spring集成:SpringSource( http://www.springsource.com )
  • Mule ESB:MuleSoft( http://www.mulesoft.org )
  • Apache Camel:FuseSource( http://fusesource.com )和Talend( http://www.talend.com )

IDE的支持非常好,即使視覺設計師也可以使用這三種方法來建模集成問題(并讓他們生成代碼)。 每個框架都適合企業使用,因為所有框架都提供必需的功能,例如錯誤處理,自動測試,事務,多線程,可伸縮性和監視。

差異性

如果您知道這些框架之一,那么由于它們的概念相同和許多其他相似之處,您可以輕松地學習其他框架。 接下來,讓我們討論它們的區別,以便能夠決定何時使用哪一個。 兩個最重要的區別是支持的技術數量和使用的DSL。 因此,下面我將特別關注這兩個標準。 在所有示例中,我將使用代碼片段來實現眾所周知的EIP“基于內容的路由器”。 自己判斷,您更喜歡哪一個。

Spring整合

Spring Integration基于著名的Spring項目,并通過集成支持擴展了編程模型。 您可以像在其他Spring項目中一樣使用Spring功能,例如依賴項注入,事務或安全性。

如果您已經有一個Spring項目并且需要添加一些集成的東西,那么Spring Integration非常棒。 如果您了解Spring本身,那么幾乎不需要學習Spring Integration。 盡管如此,Spring Integration僅對技術提供了非常基本的支持-只是“基本的東西”,例如文件,FTP,JMS,TCP,HTTP或Web服務。 Mule和Apache Camel提供了許多更多的組件!
可以通過編寫許多XML代碼(沒有真正的DSL)來實現集成,如下面的代碼片段所示:

<file:inbound-channel-adapterid=”incomingOrders”directory=”file:incomingOrders”/><payload-type-router input-channel=”incomingOrders”><mapping type=”com.kw.DvdOrder” channel=”dvdOrders” /><mapping type=”com.kw.VideogameOrder”channel=”videogameOrders” /><mapping type=”com.kw.OtherOrder” channel=”otherOrders” /></payload-type-router><file:outbound-channel-adapterid=”dvdOrders”directory=”dvdOrders”/><jms:outbound-channel-adapterid=”videogamesOrders”destination=”videogameOrdersQueue”channel=”videogamesOrders”/><logging-channel-adapter id=”otherOrders” level=”INFO”/>

您還可以對某些內容使用Java代碼和注釋,但是最后,您需要大量XML。 老實說,我不太喜歡XML聲明。 它適用于配置(例如JMS連接工廠),但不適用于復雜的集成邏輯。 至少,它應該是具有更好可讀性的DSL,但是更復雜的Spring Integration示例確實很難閱讀。
此外,Eclipse的可視化設計器(稱為集成圖)還可以,但不如其競爭者那么直觀好。 因此,如果我已經有一個現有的Spring項目,并且僅添加一些僅需要“基本技術”(例如文件,FTP,JMS或JDBC)的集成邏輯,就只能使用Spring Integration。

ule子ESB

顧名思義,Mule ESB是一個完整的ESB,包括幾個附加功能,而不僅僅是一個集成框架(您可以將其與基于Apache Camel的ESB Apache ServiceMix進行比較)。 盡管如此,Mule也可以用作輕量級的集成框架-只需不添加和使用EIP集成之外的任何其他功能。 作為Spring Integration,Mule僅提供XML DSL。 在我看來,至少它比Spring Integration更容易閱讀。 Mule Studio提供了非常出色且直觀的視覺設計師。 將以下代碼片段與上面的Spring集成代碼進行比較。 它比Spring Integration更像DSL。 如果集成邏輯更復雜,則這很重要。

<flow name=”muleFlow”><file:inbound-endpoint path=”incomingOrders”/><choice><when expression=”payload instanceof com.kw.DvdOrder”evaluator=”groovy”><file:outbound-endpoint path=”incoming/dvdOrders”/></when><when expression=”payload instanceof com.kw.DvdOrder”evaluator=”groovy”><jms:outbound-endpointqueue=”videogameOrdersQueue”/></when><otherwise><logger level=”INFO”/></otherwise></choice>
</flow>

Mule的主要優點是與重要專有接口(例如SAP,Tibco Rendevous,Oracle Siebel CRM,Paypal或IBM的CICS事務網關 )的一些非常有趣的連接器 。 如果您的集成項目需要其中一些連接器,那么我可能會選擇Mule!

對于某些項目而言,缺點是Mule對OSGi拒絕: http : //blogs.mulesoft.org/osgi-no-thanks/

阿帕奇駱駝

Apache Camel與Mule幾乎相同。 它為您可能想到的幾乎每種技術提供了許多組件(甚至比Mule還要多)。 如果沒有可用的組件,則可以從Maven原型開始很容易地創建自己的組件! 如果您是Spring的人:Camel也具有很棒的Spring集成。 與其他兩個一樣,它提供了XML DSL:

<route><from uri=”file:incomingOrders”/><choice><when><simple>${in.header.type} is ‘com.kw.DvdOrder’</simple><to uri=”file:incoming/dvdOrders”/></when><when><simple>${in.header.type} is ‘com.kw.VideogameOrder’</simple><to uri=”jms:videogameOrdersQueue”/></when><otherwise><to uri=”log:OtherOrders”/></otherwise></choice></route>

可讀性優于Spring Integration,并且幾乎與Mule相同。 此外,FuseSource還提供了一個很好的(但商業化的)可視化設計器Fuse IDE,它可以生成XML DSL代碼。 盡管如此,無論您使用視覺設計器還是僅使用XML編輯器,它都是很多XML。 我個人不喜歡這樣。

因此,讓我們向您展示另一個很棒的功能: Apache Camel還提供了Java,Groovy和Scala的DSL 。 您不必編寫太多難看的XML。 就個人而言,我更喜歡使用這些流利的DSL之一而不是XML來進行集成邏輯。 我只使用XML做配置工作,例如JMS連接工廠或JDBC屬性。 在這里,您可以看到使用Java DSL代碼段的相同示例:

from(“file:incomingOrders “).choice().when(body().isInstanceOf(com.kw.DvdOrder.class)).to(“file:incoming/dvdOrders”).when(body().isInstanceOf(com.kw.VideogameOrder.class)).to(“jms:videogameOrdersQueue “).otherwise().to(“mock:OtherOrders “);

流利的編程DSL非常易于閱讀(即使在更復雜的示例中也是如此)。 此外,這些編程DSL比XML具有更好的IDE支持(代碼完成,重構等)。 由于這些很棒的流利的DSL,如果我不需要Mule的某些出色的連接器來連接專有產品,我將始終使用Apache Camel。 由于它與Spring的集成非常好,因此在大多數用例中,我甚至更喜歡Apache Camel。

順便說一句:Talend提供了一個可視化設計器來生成Java DSL代碼,但是它會生成大量樣板代碼,并且反之亦然(即您無法編輯生成的代碼)。 這是一個不可行的標準,必須盡快解決(希望如此)!

最終獲勝者是…

…所有這三個集成框架,因為它們都是輕量級的并且易于使用-即使是用于復雜的集成項目。 始終使用相同的語法和概念來集成多種不同的技術真是太棒了–包括非常好的測試支持。

個人最喜歡的是Apache Camel,這是因為它具有出色的Java,Groovy和Scala DSL ,并結合了許多受支持的技術。 僅當我需要某些專有產品的獨特連接器時,才使用Mule。 如果只需要集成“基本技術”(例如FTP或JMS),則只能在現有的Spring項目中使用Spring Integration。 盡管如此:無論您選擇這些輕量級集成框架中的哪個,都可以通過輕松的工作輕松實現復雜的集成項目,這將帶來很多樂趣。 切記:繁瑣的ESB通常具有太多的功能,因此也有太多不必要的復雜性和工作量。 使用正確的工具完成正確的工作!

參考: 被寵壞的選擇:使用哪種集成框架– Spring Integration,Mule ESB或Apache Camel? 來自我們的JCG合作伙伴 ? 關于Java EE / SOA /云計算的博客的Kai Wahner。


翻譯自: https://www.javacodegeeks.com/2012/03/integration-framework-comparison-spring.html

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

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

相關文章

Vue.js組件學習

組件可以擴展HTML元素&#xff0c;封裝可重用的HTML代碼&#xff0c;我們可以將組件看作自定義的HTML元素。組件系統提供了一種抽象&#xff0c;讓我們可以使用獨立可復用的小組件來構建大型應用。 一個簡單組件例子(全局注冊&#xff09; <!DOCTYPE html> <html>&…

Winform MD5

1&#xff1a;MD5 http://www.cmd5.com/ 字節數組----字符串 //將字節數組中每個元素按照指定的編碼格式解析成字符串//直接將數組ToString()//將字節數組中的每個元素ToString() //ToString("Params") ToString("x") //可以將十進制字符串轉換為16進制字符…

HTML元素顯示與隱藏

在WEB開發中&#xff0c;前臺HTML中經常需要控制元素的隱藏與顯示&#xff0c;我們最為最常見是二級導航欄&#xff08;通過鼠標的移動來觸發onmouseover&#xff0c;onmouseout事件來實現二級菜單的顯示與隱藏&#xff09;二級菜單的顯示與隱藏。 然而控制元素的影響與顯示有…

書評:JavaFX 2.0:示例介紹

盡管Oracle在JavaOne 2010和JavaOne 2011上對JavaFX的更改使我從懷疑論者轉變為對JavaFX的信奉者 &#xff0c;但是JavaFX愿景的轉變并非沒有缺點 。 特別是&#xff0c;JavaFX圖書市場一直很棘手&#xff0c;因為幾乎所有可用的JavaFX圖書都與1.x版本有關。 在這篇文章中&…

腦子越來越不好使,文字越來越像馱shi

沒辦法&#xff0c;還是記下來。。。轉載于:https://www.cnblogs.com/thorlet/p/5926595.html

python機制_python異常機制個人理解(參考網上資料)

當你的程序中出現異常情況時就需要異常處理。比如當你打開一個不存在的文件時。當你的程序中有一些無效的語句時&#xff0c;Python會提示你有錯誤存在。下面是一個拼寫錯誤的例子&#xff0c;print寫成了Print。Python是大小寫敏感的&#xff0c;因此Python將引發一個錯誤&…

NYOJ 24 素數距離問題

素數距離問題 時間限制&#xff1a;3000 ms | 內存限制&#xff1a;65535 KB難度&#xff1a;2描述 現在給出你一些數&#xff0c;要求你寫出一個程序&#xff0c;輸出這些整數相鄰最近的素數&#xff0c;并輸出其相距長度。如果左右有等距離長度素數&#xff0c;則輸出左側的…

C#控件大小隨窗體大小等比例變化

相信很多博友在開發初次接觸學習C# winForm時&#xff0c;當窗體大小變化時&#xff0c;窗體內的控件并沒有隨著窗體的變化而變化&#xff0c;最近因為一個項目工程的原因&#xff0c;也需要解決這個問題。通過查閱和學習&#xff0c;這個問題得到了解決&#xff0c;或許不是很…

Google Appengine登臺服務器操作方法

Google的App Engine開箱即用&#xff0c;支持版本化部署。 您可以非常輕松地在各修訂版之間來回切換&#xff0c;這是在上線之前正確測試應用程序的一項很棒的功能。 有一個主要問題&#xff1a;應用程序的所有版本共享同一數據存儲。 因此&#xff0c;如果要遷移數據&#xff…

下 面 這 條 語 句 一 共 創 建 了 多 少 個 對 象 : String s=a+b+c+d;

javac 編譯可以對字符串常量直接相加的表達式進行優化&#xff0c; 不必要等到運行期去進行加法運算處理&#xff0c; 而是在編譯時去掉其中的加號&#xff0c; 直接將其編譯成一個這些常量相連的結果。題目中的第一行代碼被編譯器在編譯時優化后&#xff0c; 相當于直接定義了…

公共樣式_設計干貨 | 園路鋪裝的100種樣式,保存收好

Part 1園路的形式主干道&#xff1a;聯系全園&#xff0c;必須考慮通行、生產、救護、消防、游覽的需要。次干道&#xff1a;溝通各景點、建筑&#xff0c;通輕型車輛。休閑小徑、健康步道&#xff1a;健康步道是近年來最為流行的足底按摩健身方式。通過行走卵石路上按摩足底穴…

22個所見即所得在線 Web 編輯器

新聞來源:sixrevisions.com我們曾介紹過 10 個基于 JavaScript 的 WYSIWYG&#xff08;所見即所得&#xff09; 編輯器&#xff0c;這些 Web 編輯器可以在線編輯和處理富 Web 內容&#xff0c;包括格式文本&#xff0c;表格&#xff0c;圖片&#xff0c;媒體&#xff0c;鏈接等…

配置阿里云作為yum 源

第一步&#xff1a;下載aliyum 的yum源配置文件。 http://mirrors.aliyun.com/repo/ 第二步&#xff1a;把下載到的repo文件復制到/etc/yum.repo.d/目錄下。 ----------------------------------------------------下面是本地yum源的一個例子 [base_extra]namebase & extra…

Spring 3,Spring Web Services 2和LDAP安全

今年的開局很好&#xff0c;其中另一個“截止日期不會改變” /“跳過所有繁文tape節” / “狂野西部”類型的項目中&#xff0c;我必須弄清楚并使用相對而言實現一些功能。新的庫和技術需要進行更改&#xff0c;Spring 3并不是新增功能&#xff0c;但是在Java 5&#xff0c;web…

vue 日期選擇器默認時間_vue-datepicker

vue-datepicker基于 Vue 的日期/時間選擇組件。安裝NodeJS 環境 (commonjs)npm i hyjiacan/vue-datepicker或者yarn add hyjiacan/vue-datepicker可以通過以下方式獲取最新的代碼git clone https://github.com/hyjiacan/vue-datepicker.git源碼倉庫瀏覽器環境 (umd)Since 2.4.0…

easyUI validate函數【總結篇-部分轉】

以下是自己總結和修改別人的帖子和資源整理出來的一些常用驗證函數&#xff0c;備用&#xff0c;交流。 <body>郵箱驗證&#xff1a;<input type"text" validtype"email" required"true" missingMessage"不能為空" invalidMe…

CSDN挑戰編程——《金色十月線上編程比賽第一題:小女孩數數》

金色十月線上編程比賽第一題&#xff1a;小女孩數數 題目詳情: 【金色十月線上編程比賽規則】 一個小女孩正在用左手手指數數&#xff0c;從1數到n。她從拇指算作1開始數起&#xff0c;然后&#xff0c;食指為2&#xff0c;中指為3&#xff0c;無名指為4&#xff0c;小指為5。…

ubuntu 安裝完成后的工作

以安裝 ubuntu 15.10 為例 1. 備份并更改源 1 cd /etc/apt 2 sudo cp source.list source.list.bak 3 sudo vi source.list 刪除所有內容并增加其他源&#xff08;用vi刪除所有內容&#xff0c;命令行下gg移動光標至文件頭&#xff0c;dG刪除光標后所有內容&#xff09; 阿里云…

Morphia和MongoDB:不斷發展的文檔結構

在上一篇有關Morphia的文章中 &#xff0c;我介紹了一些典型用法&#xff0c;并提到了一些已知問題的警告和解決方法。 我展示了使用Morphia多么容易&#xff0c;以及它與Java世界的交互方式。 為了跟進該帖子&#xff0c;我將討論如何處理一些現實生活中的需求&#xff1a;處理…

angular 點菜_Vue2與Angular5實現無人點餐、無人收銀系統項目實戰視頻教程【組合套餐】(大地)...

Vue2實現無人點餐、無人收銀系統項目實戰視頻教程詳情地址&#xff1a;Angular5實現無人點餐、無人收銀系統項目實戰視頻教程詳情地址&#xff1a;教程介紹&#xff1a;Vue2與Angular5實現無人點餐、無人收銀系統項目實戰視頻教程【組合套餐】是由大地老師傾情錄制的最新Vue2與…