Camel in Action
书中对生产者和消费者的定义对我来说有点混乱。我已经读过类似问题的其他两个答案,但我仍然觉得不是这样。
生产者是引用实体能力的Camel抽象 创建消息并将消息发送到端点。数字 1.10说明了生产者适应其他Camel概念的位置。当需要将消息发送到端点时,生产者将会 创建一个交换并用与之兼容的数据填充它 特定的终点。例如,
FileProducer
将写入 消息正文到文件。另一方面,JmsProducer
将映射 将Camel消息发送到JMS之前将消息发送到javax.jms.Message
目的地。这是骆驼的一个重要特征,因为它隐藏起来 与特定运输相互作用的复杂性。消费者是接收由a生成的消息的服务 生产者,将它们包装在交换中,然后发送它们进行处理。 消费者是在Camel中路由交换的来源。 回顾图1.10,我们可以看到消费者所处的位置 与其他骆驼概念。为了创建一个新的交换,消费者会 使用包装正在使用的有效负载的端点。处理器是 然后用于在Camel中启动交换路由 路由引擎。
谁真正创建了一个交换?典型的沟通渠道的哪一方是生产者和消费者?从上面的文字中我无法确定谁对此负责。如果有人可以提供图片(书中的图片对我来说不清楚),那将是很好的,其中究竟是制作人和消费者,并解释他们如何以简单的方式工作。也许一些例子也很有用。
好吧也许最好举一个例子,有人可以告诉我它是如何运作的。 想象一下,我们想要从文件夹中获取文件并将它们放在JMS队列中 发送它们进行进一步处理,最终保存在磁盘上。
根据我的照片,生产者,消费者到底在哪里?我意识到什么是组件和端点。
答案 0 :(得分:7)
或许the javadoc for Exchange class会为您澄清所有权。以下是回答关于谁创建Exchange的问题的片段:
消费者收到请求时会创建Exchange。创建一个新消息,将请求设置为消息正文,并根据消费者的其他端点和协议相关信息添加为消息的标题。然后创建一个Exchange,并将新创建的Message设置为Exchange上的in。因此,交易所在消费者中开始其生活。
答案 1 :(得分:7)
你或多或少对你的怀疑是正确的。举个简单的例子:
CamelContext camelContext = new DefaultCamelContext();
camelContext.addRoutes(new RouteBuilder() {
@Override
public void configure() {
from("file:data/inbox?noop=true") // consumer
.to("file:data/outbox"); // producer
}
});
camelContext.start();
Thread.sleep(2000);
camelContext.stop();
在此示例中,我们使用RouteBuilder
创建了Route
,一旦CamelContext
启动,就会执行如下操作:
FileComponent
来表示这两个位置。FileEndpoint
。FileConsumer
以便从data/inbox
。GenericFileProducer
以写入data/outbox
。FileConsumer
以开始从其目录开始轮询文件,该文件指示其Endpoint
创建Exchange
(如图所示)。 GenericFileMessage
绑定了Exchange
。Exchange
已移交给FileProducer
。从此视图中,Consumer
不会创建任何交换。我想,在本书的这个阶段它还没有意义。这反映在文本中。但是,查看实现,当您查看代码时,两者都是等效的:
Consumer
在发送邮件时使用了一些Processor
,在这种情况下,由Consumer
表示,然后由Consumer
查询以生成{Exchange
1}} Consumer
查询其Endpoint
,然后创建实际的Exchange
。