- Apache Camel教程
- Apache Camel - 主页
- Apache Camel - 简介
- Apache Camel - 概述
- Apache Camel - 功能
- Apache Camel - 架构
- Apache Camel - CamelContext
- Apache Camel - 端点
- Apache Camel - 组件
- Apache Camel - 消息队列
- Apache Camel - 项目
- 使用 Camel 和 Spring
- Apache Camel 有用资源
- Apache Camel - 快速指南
- Apache Camel - 有用的资源
- Apache Camel - 讨论
Apache Camel - 组件
Camel 提供了几个预构建的组件。
在本章中,我们将讨论camel-core模块中的一些重要组件。
豆
Bean组件将beans绑定到 Camel 消息交换。创建 Endpoint 的 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 方法;在这种情况下,在计算 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 使用 Simple Logging Facade for Java (SLF4J) 作为各种日志框架的抽象。您可以使用java.util.logging、logback、log4j进行日志记录。此代码片段说明了日志组件的使用-
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组件用于定期发送消息,因此在测试 Camel 应用程序时非常有用。这里的代码片段每两秒向控制台发出一条测试消息 -
from("timer://testTimer?period = 2000") .setBody() .simple("This is a test message ${header.timer}") .to("stream:out");