Apache Camel

Apache Camel

Camel能夠在大量的領域語言中讓你定義路由以及中間規則,包括基於Java的Fluent API,Spring或者Blueprint XML配置檔案,甚至是Scala(是一種基於JVM,集合了面向對象編程和函式式編程優點的高級程式設計語言)DSL。 您能夠通過你的IDE或者Java、Scala或者XML編輯器里獲得智慧型化路由規則補全功能。

1, 什麼是Camel

camel首先是一個規則引擎。其次才是一個開源項目。

Apache Camel是Apache基金會下的一個開源項目,它是一個基於規則路由和中介引擎,提供企業集成模式的Java對象的實現,通過應用程式接口(或稱為陳述式的Java領域特定語言(DSL))來配置路由和中介的規則。領域特定語言意味著Apache Camel支持你在的集成開發工具中使用平常的,類型安全的,可自動補全的Java代碼來編寫路由規則,而不需要大量的XML配置檔案。同時,也支持在Spring中使用XML配置定義路由和中介規則。

Camel提供基於規則的路由(Routing)引擎

from().to().to()

這種表述可以使用Camel定義的DSL語言,xml語言以及scala語言。如下例:

from(“file:path").to("activemq:queue:queuename") 將某檔案,讀入並寫入到ActiveMQ的JMS中。

from("file:path").to("ftp://url")將一個檔案,讀入並寫入到ftp某目錄中。

2, 幾個基本概念

2.1Endpoint

Camel中的Endpoint類似webservice中的endpoint,即某個資源的位置。Camel使用URI來定位一個endpoint. 比如上例中的from(“file://xxxx”), 可以是file:///edi/po/?include=.*\\.txt, 代表/EDI/PO/下的所有txt檔案,即為一個endpoint

2.2 Component

Camel的內置組件(用戶也可以按照Camel的接口約定,來定義自己的component), 用以提供對某種協定的資源訪問的支持,如上例中的file即為component, 其提供了對本地檔案系統訪問的支持,activemq是另一個component, 提供了camel訪問以ActiveMQ實現的JMS的直接訪問能力。

1 timer timer://vv?period=500

如果書寫不正確,報錯:No component found with scheme: timeruuu

2 file file:d:/temp/inbox?delay=30000

file:g:/temp/inbox/?scheduler=quartz2≻heduler.cron=0+0+0/1+*+*+?"

3 zookeeper from("zookeeper://localhost:39913/somepath/somenode").to("mock:result");

camel-zookeeper依賴

org.apache.camel

camel-zookeeper

4 ftp ftp://localhost/inbox?username=yorker&password=123456

5 sql

6 多次轉換路由 from(file:path).to(ftp://url).to(ftp://url)
7 從mq獲取數據源 from(activemqRemote:queue:queuename).to(ftp://url)
8 組合用法 from().log().process().log().to() // camel裡面的process和jms裡面的process是一個interface

 

2.3,Routing Language

Camel 提供了3種方式定義Routing,

a, Java 語言兼容的DSL語言

舉例:

from("file:edifiles?include=.*\\.txt")

.to("smooks://classpath: smooks-config.xml")

.bean(wrapper, "wrap")

.to("activemq:queue:tempQ")

.end();

此例子中,是讀取edifiles資料夾下的所有txt檔案,然後路由至smooks組件,smooks是一個檔案轉換組件,完成後,調用bean組件,bean是一個可以調用用戶自己定義的POJO的組件,完成後,通過activemq組件,路由至一個名為tempQ的JMS佇列。

該語法是java兼容的,可以正常在Eclipse等Java IDE中編輯並編譯。

B,Spring語法兼容的XML配置檔案

此例子中,讀取inputdir資料夾下的檔案,然後轉換成String,寫入名為tempQ的JMS佇列。

C, ScalaDSL

相關詞條

熱門詞條

聯絡我們