ash*_*hur 11 java apache-camel
Camel in Action书中的生产者和消费者的定义对我来说有点混乱.我已经读过类似问题的其他两个答案,但我仍然觉得不是那样的.
生产者是Camel抽象,它指的是能够创建消息并将消息发送到端点的实体.图1.10说明了生产者适应其他Camel概念的位置.当需要将消息发送到端点时,生产者将创建交换并使用与该特定端点兼容的数据填充它.例如,a
FileProducer会将消息正文写入文件.甲JmsProducer,在另一方面,将映射骆驼消息到javax.jms.Message其发送到JMS目的地之前.这是Camel的一个重要特性,因为它隐藏了与特定传输交互的复杂性.使用者是接收生产者生成的消息的服务,将它们包装在交换中,然后发送它们进行处理.消费者是在Camel中路由交换的来源.回顾图1.10,我们可以看到消费者与其他Camel概念的契合程度.要创建新的交换,消费者将使用包装正在使用的有效负载的端点.然后使用处理器使用路由引擎启动Camel中的交换路由.
谁在实际创建交易所?典型的沟通渠道的哪一方是生产者和消费者?从上面的文字我不能真正说出谁对此负责.如果有人可以提供一张照片(书中的那张照片对我来说还不清楚),那将是很棒的,其中究竟是生产者和消费者,并解释他们如何以简单的方式工作.也许一些例子也会有用.
好吧也许最好举一个例子,有人可以告诉我它是如何工作的.想象一下,我们想要从文件夹中获取文件并将它们放在JMS队列中,然后从那里发送它们以进行进一步处理,最终保存在磁盘上.
根据我的照片,生产者,消费者到底在哪里?我意识到什么是组件和端点.
也许Exchange类的javadoc将为您阐明所有权.以下是回答关于谁创建Exchange的问题的片段:
消费者收到请求时会创建Exchange.创建一个新消息,将请求设置为消息正文,并根据消费者的其他端点和协议相关信息添加为消息的标题.然后创建一个Exchange,并将新创建的Message设置为Exchange上的in.因此,Exchange在消费者中开始其生命.
你或多或少对你的怀疑是正确的.举个简单的例子:
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();
Run Code Online (Sandbox Code Playgroud)
在这个例子中,我们使用a RouteBuilder来创建一个Route,一旦CamelContext启动,它执行如下:
FileComponents来表示两个位置.FileEndpoint通过查询以前的组件来创建相应的s.FileConsumer阅读data/inbox.GenericFileProducer写入data/outbox.FileConsumer开始从其目录开始轮询文件,该目录指示其Endpoint创建Exchange(如图中所示).A GenericFileMessage必然会这样Exchange.Exchange是交给了FileProducer.从这个角度来看,没有创建交换Consumer.我想,在本书的这个阶段它还没有意义.这反映在文本中.但是,查看实现,当您查看代码时,两者都是等效的:
该Consumer用途的一些Processor发送该消息是当在这种情况下,由a表示Consumer,然后被查询Consumer,以生成Exchange所述Consumer查询其Endpoint用于其随后创建实际的Exchange.