什么時候使用Apache Camel?

Apache Camel是JVM / Java環境中我最喜歡的開源框架之一。 它可以輕松集成使用多種協議和技術的不同應用程序。 本文介紹了何時使用Apache Camel以及何時使用其他替代方法。

問題:企業應用程序集成(EAI)

由于新產品和新應用,幾乎每個公司都必須進行企業應用程序集成。 集成這些應用程序會產生一些問題。 每十年出現新的范例,例如客戶端/服務器通信,面向服務的體系結構(SOA)或云計算。

此外,出現了不同的接口,協議和技術。 如今(而不是過去(很多年前))將數據存儲在文件中,而不再使用SQL數據庫。 有時,在某些用例中甚至需要NoSQL數據庫。 同步遠程過程調用或異步消息傳遞用于通過多種技術(如RMI,SOAP Web服務,REST或JMS)進行通信。 存在許多軟件孤島。 盡管如此,這幾十年來的所有應用程序和產品都必須相互通信才能完美地協同工作。

企業集成模式(EIP)

當然,您可以徹底解決每個問題,編寫一些意大利面條式代碼,并使應用程序協同工作。 不幸的是,您的管理層將不喜歡該解決方案的長期前景。

企業集成模式(www.eaipatterns.com)幫助分散問題并使用標準化方法集成應用程序。 使用這些,您總是使用相同的概念來轉換和路由消息。 因此,最好在每次遇到問題時都不要重新發明輪子。

集成系統的替代方法

存在用于集成應用程序的三種選擇。 EIP可以在每種解決方案中使用。

解決方案1:自己的自定義解決方案

實施適合您的問題的單獨解決方案,而不必將問題分成幾小部分。 這可行,并且可能是小型用例的最快替代方案。 您必須自己編寫所有代碼。 如果團隊成員更換,維護成本可能會很高。

解決方案2:集成框架

使用有助于使用幾種集成模式以標準化方式集成應用程序的框架。 它大大減少了工作量。 每個開發人員都將很容易理解您的工作(如果他知道所使用的框架)。

解決方案3:企業服務總線(ESB)

使用企業服務總線來集成您的應用程序。 在幕后,ESB還使用了集成框架。 但是還有更多功能,例如業務流程管理,注冊表或業務活動監視。 通常,您可以在圖形用戶界面中配置路由和諸如此類的東西–您必須自己決定是否可以降低復雜性和工作量。 通常,ESB是一個復雜的產品。 學習曲線要??高得多。 但是,您將獲得一個非常強大的工具,該工具應該可以滿足您的所有需求。

什么是Apache Camel?

Apache Camel是一個輕量級的集成框架,可實現所有EIP。 因此,您可以使用所需的模式輕松集成不同的應用程序。 您可以使用Java,Spring XML,Scala或Groovy。 您可以想象到的幾乎每種技術都可以使用,例如HTTP,FTP,JMS,EJB,JPA,RMI,JMS,JMX,LDAP,Netty,以及許多很多其他技術(當然,大多數ESB也提供對它們的支持)。 此外,可以非常輕松地創建自己的自定義組件。

您可以將Apache Camel作為獨立的應用程序部署在Web容器(例如Tomcat或Jetty),JEE應用程序服務器(例如JBoss AS或WebSphere AS),OSGi環境中或與Spring容器結合使用。

如果您需要有關Apache Camel的更多信息,請訪問其網站作為起點: http : //camel.apache.org 。 本文暫無技術介紹J

什么時候使用Apache Camel?

如果要集成具有不同協議和技術的多個應用程序,Apache Camel很棒。 為什么? 我非常欣賞其中一項功能(除了支持多種技術之外,還支持不同的編程語言): 每個集成都使用相同的概念! 無論您使用哪種協議。 無論您使用哪種技術。 無論您使用哪種域特定語言(DSL),它都可以是Java,Scala,Groovy或Spring XML。 您以相同的方式進行操作。 總是! 有生產者,有消費者,有端點,有EIP,有自定義處理器/ bean(例如用于自定義轉換)和參數(例如用于憑證)。

這是一個包含使用Java DSL的所有這些概念的示例:

from(? activeMQ:orderQueue“).. transaction()。log(? processing order“)。to(mock:“ notYetExistingInterface”)

現在讓我們看一下使用Scala DSL的另一個示例:

“ file:incomingOrders?noop = true”過程(新的TransformationProcessor)到“ jdbc:orderDatastore”

如果您是開發人員,那么您應該能夠認識到這些路線的作用,不是嗎?

另外兩個非常重要的功能是對錯誤處理(例如,使用死信隊列)的支持和自動測試。 您可以使用Camel擴展的JUnit輕松測試所有內容! 同樣,無論您要支持哪種技術,您都始終使用相同的概念。

Apache Camel已經成熟,可以投入生產了。 它提供可伸縮性,事務支持,并發和監視。 FuseSource可提供商業支持: http : //fusesource.com/products/enterprise-camel

什么時候不使用Apache Camel?

好吧,是的,在某些用例中,我不使用Apache Camel。 我已經在下圖中說明了這一點(請記住我上面提到的三種選擇:自己的自定義集成,集成框架,企業服務總線)。

如果您只需要集成一種或兩種技術(例如讀取文件或發送JMS消息),則使用一些眾所周知的庫(例如Apache Commons IO或Spring JmsTemplate)可能會更容易,更快捷。 但是請務必使用這些幫助程序類,純凈的File或JMS與try-catch-error集成非常丑陋!

盡管FuseSource提供了商業支持,但我不會將Apache Camel用于大型集成項目。 在大多數情況下,ESB是完成此任務的正確工具。 它提供了許多其他功能,例如BPM或BAM。 當然,您也可以使用幾個單一的框架或產品并“創建”自己的ESB,但這是浪費時間和金錢(在我看來)。

已經有幾種生產就緒的ESB。 通常,開源解決方案比諸如WebSphere Message Broker之類的商業產品更輕巧(您可能只需要一兩天即可安裝該產品的評估版)! 著名的開源ESB是Apache ServiceMix,Mule ESB和WSO2 ESB。 順便說一句:您是否知道某些基于Apache Camel框架的ESB(例如Apache Service Mix和Talend ESB)。 因此,如果您喜歡Apache Camel,則也可以使用Apache ServiceMix或基于ServiceMix的商業化Fuse ESB。

結論

Apache Camel是一個很棒的框架,用于將應用程序與不同的技術集成在一起。 最好的事情是您始終使用相同的概念。 此外,對許多技術的支持,良好的錯誤處理和輕松的自動測試使其可用于集成項目。

由于每個公司的應用程序和技術的數量將進一步增加,因此Apache Camel擁有美好的未來。 今天,我們有了應用程序孤島,十年后,我們可能會部署在Goggle App Engine,CloudFoundry,Amazon EC3或任何其他云服務中的云孤島。 因此,我希望Apache Camel也不會為適應云時代做好準備(例如,通過提供易于連接到云框架的組件)。 但這就是未來。如果您必須在JVM / Java環境中集成應用程序,那么現在您真的應該嘗試一下該框架。

順便說一句:我知道我在本文中贊揚Camel,但我既不是Camel的提交者,也不是FuseSource的工作人員。 我只是真的很喜歡這個框架。

最好的祝福,

參考: 何時使用Apache Camel? 從我們的JCG合作伙伴 Kai Wahner在關于Java EE / SOA /云計算的博客上的博客。


翻譯自: https://www.javacodegeeks.com/2012/07/when-to-use-apache-camel.html

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

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

相關文章

念整數

念整數(5分)題目內容: 你的程序要讀入一個整數,范圍是[-100000,100000]。然后,用漢語拼音將這個整數的每一位輸出出來。 如輸入1234,則輸出: yi er san si注意,每個字的拼音之間有一…

python 比較運算符放在列表中_在Python3中將運算符放在列表中

我想把操作符作為一個列表,然后從列表中調用一個元素作為操作符。在如果我沒有在運算符周圍加引號,那么列表中逗號的語法錯誤:File "p22.py", line 24cat [,-,*]^SyntaxError: invalid syntax如果我把引語放在周圍,那么…

軟工個人總結

目錄 一、個人提升二、寫下屬于自己的人月神話三、對下一屆、后來人、自己的建議四、我的團隊——Clover五、關于代碼質量六、學過軟件工程?七、自我介紹八、個性發揮一、個人提升 1. 開學初的目標 希望通過團隊合作領會團隊合作的內在精神,希望在分工完…

Tomcat上下文JUnit @Rule

創建測試上下文的JUnit Rule的初稿。 這可以用Spring上下文規則可用于 這個帖子 創建集成測試一個完整的Spring上下文。 import org.apache.commons.dbcp.BasicDataSource; import org.apache.log4j.Logger; import org.junit.rules.TestRule; import org.junit.runner.Descrip…

排序算法之(7)——堆排序

【堆排序的思路】 堆排序主要是利用了堆的性質。對于大頂堆:堆中的每一個節點的值都不小于它的孩子節點的值,具體可參考我的還有一篇博客http://blog.csdn.net/adminabcd/article/details/46880591,那么大頂堆的堆頂元素就是當前堆中全部元素…

HTML基礎:基本標簽簡介(3)

html中有很多標簽&#xff0c;下面介紹最基本的幾個標簽。 1、meta 是head標簽中的一個輔助性標簽。 有2個重要屬性&#xff1a; &#xff08;1&#xff09;name 可以優化頁面被搜索到的可能性。name中可以指定屬性&#xff0c;content是屬性值。 <html><head><…

java 字符碼_Java字符編碼

編碼原理介紹(中文編碼雜談)&#xff1a;int -> byte可以直接使用強制類型轉換: byte b (byte) aInt;這個操作是直接截取int中最低一個字節&#xff0c;如果int大于255&#xff0c;則值就會變得面目全非了byte -> int這里有兩種情況&#xff0c;一種是要求保持值不變&am…

重新登錄:重新登錄

嗨&#xff0c;我再次回到日志中來&#xff0c;這是任何應用程序設計和開發的固有部分。 我是堅強的基礎知識的忠實擁護者&#xff0c;在我的拙見中&#xff0c;日志記錄是任何企業級應用程序中經常被忽略但基本的關鍵要素之一。 我已經寫在此之前這里 。 為了理解當前文章&…

eclipse 下使用git clone

方法一&#xff1a;eclipse安裝好git插件后&#xff0c;直接import-git-project from git- clone url-輸入github的網址等就可以了方法二&#xff1a;使用git軟件&#xff0c;到指定的目錄&#xff0c;右擊git bash here&#xff0c;git clone 加帶有網址的文件.git,如&#xf…

linux -unrar解壓縮

解壓縮命令unrar的使用&#xff1a; $unrar --help用法: unrar <command>-<switch 1> -<switchN> <archive><files...><listfiles...><path_to_extract\><命令>e 解壓文件到當前目錄l[t,b] 列出壓縮文檔信…

終極JPA查詢和技巧列表–第3部分

在閱讀第三部分之前&#xff0c;請記住本系列的第一部分和第二部分 JPA&#xff1a;通過查詢創建對象 JPA允許我們在查詢內創建對象&#xff0c;并帶有所需的值&#xff1a; package com.model;public class PersonDogAmountReport {private int dogAmount;private Person pe…

分治1--二分查找

分治1--二分查找 一、心得 二、題目和分析 三、代碼和結果 1 #include <iostream>2 using namespace std;3 int a[10]{1,2,4,5,7,8,9,10,13,20};4 5 6 //非遞歸 7 int find(int i){8 int l0,r9;9 int mid(lr)/2; 10 while(l<r){ 11 mid(lr)/2; 12…

隱式意圖啟動一個Activity

隱式意圖是通過指定一組動作或者屬性實現&#xff0c;主要用于跨應用使用。 1.創建一個意圖對象 Intent intent new Intent();2.設置意圖過濾器 intent.setAction("android.intent.action.testActivity"); //對應于action intent.addCategory("android.intent.…

Spring自定義命名空間

Spring自定義命名空間提供了一種很好的方式來簡化用于描述Spring應用程序上下文的bean定義的xml文件。 這是一個相當古老的概念&#xff0c;最初是在Spring 2.0中引入的&#xff0c;但值得不時地進行審查。 考慮一種情況&#xff0c;必須為沒有自定義名稱空間的Spring MVC應用程…

java二叉樹代碼_JAVA語言實現二叉樹生成的代碼教程

本文主要向大家介紹了JAVA語言實現二叉樹生成的代碼教程&#xff0c;通過具體的內容向大家展示&#xff0c;希望對大家學習JAVA語言有所幫助。給定某二叉樹三序遍歷中的兩個&#xff0c;我們即可以通過生成該二叉樹&#xff0c;并遍歷的方法&#xff0c;求出剩下的一序&#xf…

一個回到頂部的錨點

一般網站的右下角都會有一個回到頂部的錨點&#xff0c;但是在沒有學bootstrap的時候&#xff0c;我還是會想著用定位來做這個東西&#xff0c;但是現在用bootstrap來做的&#xff0c;所以將它記錄下來。 <!DOCTYPE html><html> <head><title>附加導航…

jquery jgrid filterToolBar beforeSearch 修改postData

beforeSearch: function() { var posted_data $("#mygrid").jqGrid(getGridParam,postData); posted_data ["testp"]"helloTest"; }轉載于:https://www.cnblogs.com/qiumingcheng/p/7141671.html

預告片:裸指關節SOA

我正在研究這個想法&#xff0c;但我不知道它是否對你們有吸引力。 我想就您是否需要進一步探討提出您的意見。 達成協議&#xff1a;我遇到過一些團隊&#xff0c;他們在使用SOA技術時由于其工具的復雜性而陷入泥潭。 我只在Java中看到過這種情況&#xff0c;但是我從一些C&am…

網頁轉圖片 java_java-網頁轉圖片

對比了網上常用的好幾種網頁轉圖片的開源插件&#xff0c;最后效果還不如使用原生的java直接寫來得好&#xff0c;上代碼&#xff0c;很簡單&#xff0c;中間需要考慮網頁加載延遲的問題&#xff0c;所以需要加上thread.sleep&#xff0c;休眠一下等待網頁加載完成了&#xff0…

開一個新坑吧

每天讀讀日志 給自己動力 開個新坑&#xff08;外星殖民&#xff09; 無聊時寫一寫 轉載于:https://www.cnblogs.com/dandansang/p/7143489.html