基于Apache Camel的EIP集成

jopen 8年前發布 | 24K 次閱讀 Java開發 Apache Camel

Apache Camel十一個Java庫和引擎,有多種不同的整合模式,然而他并不是BPMN或者ESB,雖然可以在此引擎下實現他們。Apache Camel是一個編程人員調節、整合問題的工具。其核心架構如上圖,我們看到的是一些不同的相互鏈接的構件,而在他們中間起鏈接作用的粘合劑就是Camel Context了。他將實體鏈接一起,有的時候被稱為Camel運行是容器。

Apache Camel是一個輕量級的集成框架,它實現了所有EIP。因此,您可以使用EIP所需的圖案容易地集成不同的應用。您可以使用Java,Spring的XML,scala或Groovy。幾乎每一個技術,你可以想像是可用的,例如HTTP,FTP,JMS,EJB,JPA,RMI,JMS,JMX,LDAP的Netty,和很多很多(當然大多數ESB還提供了對他們的支持)。此外,自定義的組件可以很容易地被創建。

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

當Camel和其它開源的組件包括OSGI,Maven,Karaf,CXF,ActiveMQ,DataBaseAPI,JMS結合后,即可以實現當前企業應用集成的大部分集成場景。對于當前開源ESB,Apache ServiceMix本身也是基于Camel來實現的一個集成服務總線,其底層核心能力仍然是Camel和ActiveMQ,同時通過Karaf和OSGI來實現了組件化的服務架構。而當前已經商用的redhat JBOSS Fuse也是基于Camel的一個商用化實現,并通過JBOSS Developer Edition來增加了可視化的設計和編排功能。

對于Camel我們最關心的還是在哪些集成場景下能夠使用的問題,因此我們從集成場景來分析具體可能使用到Camel的地方。首先分析集成場景,再來分析Camel的其它一些擴展能力。

Ftp文件集成的場景 : 該場景可以應用到文件集成,即將文件從某一個FTP或目錄,傳輸到一個目標FTP目錄上。基于Camel本身的配置,可以實現對目錄監聽的頻率,文件篩選過濾等各種關鍵屬性的配置。

消息集成場景: 該場景核心是基于ActiveMQ集成來實現,即可以將Camel接受到的各種輸入的信息,包括在接收輸入過程中產生的事件都發送消息到MQ存儲。我們可以再增加一個讀取消息的獨立配置組件,來從MQ中讀取消息。當然我們還可以增加路由和判斷功能后,將MQ接收到的消息根據路由規則分發到再下一層的二級MQ消息隊列中。

消息的輸入:可以是Http Request, WS,FTP,JMS,MQ等多種方式。

消息的輸出:可以是文件,Log日志,DB數據庫,下游MQ,HttpResponse等多種形式。

Camel通過和ActiveMQ的集成,基本可以實現傳統消息中間件的核心功能,包括基于消息的異步集成,基于消息的發布訂閱機制等。通過通過ActiveMQ也可以很好的來實現在服務集成過程中的日志管理能力。

Http集成: Camel可以集成Http的能力,其中一方面是可以將Http請求做為輸入進行后續處理。一方面是對于原生的Http請求服務,可以通過Camel進行Http服務請求的代理。在實現Http請求代理的過程中我們可以增加處理組件對Http請求的內容進行加工,映射和內容豐富等。

WS服務集成: 對于WS服務的集成重點是通過Camel和CXF框架的集成來實現。其中既可以對常規的Java API接口發布為標準的Web service服務。也可以對已有的WS服務進行Proxy服務代理,同時在進行服務代理的過程中增加對服務輸入內容的處理,數據映射和內容豐富,對服務請求內容進行Log處理等。

數據庫集成能力: 可以看到在Camel的整體集成框架里面既可以通過傳統的JDBC同數據庫集成,也可以通過Hibernate, iBatis等框架實現和數據庫的集成。在和DB的集成中,一方面是讀取DB中的數據,一方面是講輸入的請求通過SQL語句更新或寫入到DB數據庫表中。這些都可以通過Camel配置文件來實現。

對DB集成和傳統的ETL最大的區別就在于Camel的DB集成更加容易將Http,WS和DB數據庫操作能力整合起來。即通過Http或WS服務請求調用來觸發對DB的讀取和數據插入操作。這種集成方式將比傳統的ETL數據集成更加靈活和方便。

除了以上核心集成能力外,可以看到Camel本身還提供的在集成過程中的擴展能力

  • 調度任務:支持該能力,可以將配置的集成組件配置為定時周期性的調度任務進行處理。
  • 日志能力:支持,可以對在集成過程中的消息輸入,輸出等進行Log日志記錄。
  • 數據映射:支持,支持在camel配置過程中消息輸入和輸出之間的數據映射和轉換。
  • 路由能力:支持,路由可以使用過濾器、多播、接收列表、并行處理來定義,從而變得非常靈活。
  • 熱插拔:支持,本身基于OSGI框架和Karaf來實現了組件化容器和集成組件的熱部署和管理。
  • 異常處理:支持,可以處理在消息集成過程中的異常,并對異常進行管理和Log記錄

可以看到Camel本身已經具備ESB總線的底層核心能力,這也正是開源的ServiceMix基于Camel來實現的基礎。同時由于本身基于OSGI和組件化架構,我們可以很容易的根據集成場景和實際集成需求對Camel進行擴展。對于Camel本身集成的性能當前還沒做過詳細的性能測試,暫時不進行描述。

對于Camel本身支持的EIP集成模式,可以參考 http://camel.apache.org/enterprise-integration-patterns.html 的詳細描述。對于用戶手冊下載可訪問: http://camel.apache.org/manual.html

來自: http://blog.sina.com.cn/s/blog_493a84550102vzgs.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!