Apache Camel生产者和消费者

时间:2010-01-22 17:25:50

标签: messaging apache-camel

我很难理解这个概念。

我正在尝试实现一个端点,该端点在tcp端口上侦听专有格式的传入消息,然后转换消息并让camel接管转发和路由。

我是否正确理解制作人负责将消息发送到Endpoint并且Consumer从该端点接收消息?

在研究接口时,我无法弄清楚这些对象之间的消息流,特别是在消费者部分。 Consumer仅定义start()stop()方法......

在骨架实现上设置测试时,Camel在端点上调用createProducer(),在生成器对象上调用process()。之后它返回,与消费者或与之相关的处理器进行任何操作。

有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:45)

重要的是要记住,由Endpoint(即终点工厂)创建的Component可以位于Camel Route 端。如果将组件放在路径的开头,则必须实现组件Consumer部分。这样做的工作就是将特定的输入/请求(如HTTP请求)转换为通用的 - Camel Exchange - 可以沿 Route 传输。如果您将组件放在路由的末尾,那么您必须具有Producer的实现。 Producer 执行从路由结束处获取 Exchange 并将其转换为特定内容(如JMS消息)的工作。 / p>

我发现Fuse ESB文档(通常)比Apache Camel website更好。来自Fuse ESB Component page

  

消费者终端消耗请求。它们总是出现在开头   一个路由,他们封装负责接收的代码   传入请求并发送传出回复。

     

生产者端点会产生请求。它们总是出现在最后   一条路线,它们封装了负责调度的代码   传出请求并接收传入的回复。


enter image description here

答案 1 :(得分:18)

我终于通过查看Stream组件找到了它。

事实证明,我错误地认为端点是一切必须要去的东西。

简单的答案是消费者从外部系统接收数据(在我的情况下监听服务器套接字),生产者将数据发送到外部系统。

由于我的端点是只读的(它不会被用作Camel路由进程的最终目的地),我真的不需要生成器(如果系统由于配置错误而仍然尝试执行它,它应该抛出RuntimeException )。一个合适的例子是camel-atom端点 - 你可以读取feed但是(从1.6.0开始)你不能发布一个。

同样,您只需要一个只写端点的生产者,该端点不接收来自外部系统的数据(例如日志记录)。

答案 2 :(得分:6)

生产者扩展处理器,这意味着它也有一个处理方法。

查看Camel in Action一书中的免费第1章,其中详细介绍了Camel概念。 http://www.manning.com/ibsen/

本教程也非常出色,因为它以稳定的步伐引入了这些概念 http://camel.apache.org/tutorial-example-reportincident.html