Camel能夠在大量的領域語言中讓你定義路由以及中間規則,包括基於Java的Fluent API,Spring或者Blueprint XML配置檔案,甚至是Scala(是一種基於JVM,集合了面向對象編程和函式式編程優點的高級程式設計語言)DSL。 您能夠通過你的IDE或者Java、Scala或者XML編輯器里獲得智慧型化路由規則補全功能。
1, 什麼是Camel,2, 幾個基本概念,2.1Endpoint,2.2 Component,2.3,Routing Language,
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&scheduler.cron=0+0+0/1+*+*+?"
3 zookeeper from("zookeeper://localhost:39913/somepath/somenode").to("mock:result");
camel-zookeeper依賴
<groupId>org.apache.camel</groupId>
<artifactId>camel-zookeeper</artifactId>
4 ftp ftp://localhost/inbox?username=yorker&password=123456
<route id="ftp">
<from uri="ftp://127.0.0.1/data/test?username=coco&password=coco&delay=10000"/>
<process ref="action"/>
</route>
5 sql <from uri="timer:sql?period=5s" />
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
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配置檔案
<route>
<from uri="file://inputdir/"/>
<convertBodyTotype="java.lang.String"/>
<to uri="activemq:queue:tempQ "/>
</route>
此例子中,讀取inputdir資料夾下的檔案,然後轉換成String,寫入名為tempQ的JMS佇列。
C, ScalaDSL