- Apache Camel 教程
- Apache Camel - 首頁
- Apache Camel - 簡介
- Apache Camel - 概述
- Apache Camel - 功能
- Apache Camel - 架構
- Apache Camel - CamelContext
- Apache Camel - 端點
- Apache Camel - 元件
- Apache Camel - 訊息佇列
- Apache Camel - 專案
- 使用 Spring 整合 Camel
- Apache Camel 有用資源
- Apache Camel - 快速指南
- Apache Camel - 有用資源
- Apache Camel - 討論
Apache Camel - 元件
Camel 提供了多個預構建的元件。
本章將討論camel-core模組中的一些重要元件。
Bean
Bean元件將Bean繫結到Camel訊息交換。建立端點的URI指定為bean:beanID,其中beanID是登錄檔中指定的Bean的名稱。
JndiContext jndiContext = new JndiContext();
jndiContext.bind("MilkOrder", new MilkOrderProcessor());
CamelContext camelContext = new DefaultCamelContext(jndiContext);
camelContext.addRoutes(new RouteBuilder() {
public void configure() {
from("direct:bigBasket")
.to("bean:MilkOrder?method=placeOrder");
}
});
請注意端點是如何使用bean:協議指定的。您可以選擇性地指定要呼叫的Bean方法;在這種情況下,在評估端點表示式時將呼叫名為placeOrder的方法。MilkOrder是註冊在程式碼片段前兩行的MilkOrderProcessor JavaBean的JNDI名稱。為了簡潔起見,這裡省略了MilkOrderProcessor本身的定義。
Direct
您可能已經注意到我們在之前的示例中使用了Direct。要將訂單傳送給石油供應商,我們在端點規範中使用了direct:oil。使用Direct元件允許您同步呼叫端點。以下我們之前示例中的兩段程式碼說明了Direct的使用:
.when(header("order").isEqualTo("oil"))
.to("direct:oil")
以及:
from("direct:DistributeOrderDSL")
.process(myProcessor);
File
File元件提供對您機器上檔案系統的訪問。使用此元件,您可以將來自其他元件的訊息儲存到本地磁碟。此外,它還允許其他Camel元件處理本地檔案。使用File元件時,您可以使用file:directoryName[?options]或file://directoryName[?options]作為URI格式。您之前已經看到過此元件的使用:
from ("file:/order").to("jms:orderQueue");
請注意,File元件預設情況下采用目錄名稱。因此,將order目錄的內容作為輸入內容。要在order目錄中指定特定檔案,請使用以下語句:
from ("file:/order?fileName = order.xml").to("jms:orderQueue");
Log
Log元件允許您將訊息記錄到底層的日誌記錄機制。Camel使用Simple Logging Facade for Java (SLF4J)作為對各種日誌記錄框架的抽象。您可以使用java.util.logging, logback, log4j進行日誌記錄。此程式碼片段說明了Log元件的使用:
from("direct:DistributeOrderDSL")
.to("bean:MilkOrder?method = placeOrder")
.to("log:com.example.com?level = INFO&showBody = true");
SEDA
SEDA元件允許您非同步呼叫同一CamelContext中的另一個端點。如果要跨CamelContext例項呼叫,則需要使用VM元件。此處說明了SEDA的使用:
from("direct:DistributeOrderDSL")
// send it to the seda queue that is async
.to("seda:nextOrder")
在此路由中,我們將簡單地將訂單路由到nextOrder非同步佇列。訂閱此佇列的客戶端將從此佇列中獲取訊息。
Timer
Timer元件用於定期傳送訊息,因此在測試Camel應用程式時非常有用。此處的程式碼片段每兩秒向控制檯傳送一條測試訊息:
from("timer://testTimer?period = 2000")
.setBody()
.simple("This is a test message ${header.timer}")
.to("stream:out");