📅  最后修改于: 2020-10-30 10:05:09             🧑  作者: Mango
骆驼提供了几个预构建的组件。
在本章中,我们将讨论骆驼核心模块中的一些重要组件。
Bean组件将Bean绑定到Camel消息交换。创建端点的URI被指定为bean:beanID ,其中beanID是在Registry中指定的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方法。在这种情况下,将在评估Endpoint表达式时调用名为placeOrder的方法。 MilkOrder是MilkOrderProcessor Javabean的JNDI名称,已在代码段的前两行中注册。为简洁起见,此处省略了MilkOrderProcessor本身的定义。
您一定已经注意到我们前面的示例中使用了Direct 。为了向石油供应商发送订单,我们在端点规范中使用了direct:oil 。使用Direct组件可以使您同步调用端点。我们之前的示例中的以下两个代码段说明了Direct的用法-
.when(header("order").isEqualTo("oil"))
.to("direct:oil")
和,
from("direct:DistributeOrderDSL")
.process(myProcessor);
文件组件提供对计算机上文件系统的访问。使用此组件,您将能够将消息从其他组件保存到本地磁盘。另外,它允许其他Camel组件处理本地文件。在使用文件组件时,可以将file:directoryName [?options]或file:// directoryName [?options]用作URI格式。您之前已经看到了此组件的用法-
from ("file:/order").to("jms:orderQueue");
请注意,默认情况下,“文件”组件使用目录名称。因此,订单目录的内容将作为输入内容。要在订单目录中指定特定文件,您将使用以下语句-
from ("file:/order?fileName = order.xml").to("jms:orderQueue");
日志组件允许您将消息记录到底层的日志记录机制。 Camel使用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组件允许您在同一CamelContext中异步调用另一个端点。如果要跨CamelContext实例调用,则需要使用VM组件。 SEDA的使用在此处说明-
from("direct:DistributeOrderDSL")
// send it to the seda queue that is async
.to("seda:nextOrder")
在此路由中,我们将简单地将订单路由到nextOrder异步队列。订阅此队列的客户端将从该队列中提取消息。
Timer组件用于定期发送消息,因此在测试Camel应用程序时非常有用。这里的代码片段每两秒向控制台触发一条测试消息-
from("timer://testTimer?period = 2000")
.setBody()
.simple("This is a test message ${header.timer}")
.to("stream:out");