我很难绕过这个概念 .
我正在尝试实现一个 endpoints ,该 endpoints 在tcp端口上侦听专有格式的传入消息,然后转换消息并让camel接管转发和路由 .
我是否正确理解Producer负责将消息发送到 Endpoint
并且 Consumer
从该 endpoints 接收它们?
在研究接口时,我无法弄清楚这些对象之间的消息流,特别是在消费者部分 . Consumer
仅定义了 start()
和 stop()
方法......
在骨架实现上设置测试时, Camel
在 endpoints 上调用 createProducer()
,在生成器对象上调用 process()
. 之后它返回,与消费者或与之相关的处理器进行任何操作 .
有人能指出我正确的方向吗?
3 回答
重要的是要记住由
Component
(即 endpoints 工厂)创建的Endpoint
可以位于CamelRoute
的任一端 . 如果将Component放在路径的开头,那么必须有Component的Consumer
部分的实现 . 这样做的工作就是将特定的输入/请求(如HTTP请求)转换为可以沿着路径传播的通用 - 一个CamelExchange
. 如果您将Component放在路径的末尾,那么您必须具有Producer
的实现 . 生产环境 者完成从路径末端获取Exchange并将其转换为特定内容(如JMS消息)的工作 .我发现Fuse ESB文档比Apache Camel website更好(一般) . 来自Fuse ESB Component page:
我终于通过查看Stream组件找到了它 .
事实证明,我犯了一个错误,认为 endpoints 是一切中心,一切都必须去 .
简单的答案是消费者从外部系统接收数据(在我的情况下监听服务器套接字), 生产环境 者将数据发送到外部系统 .
由于我的 endpoints 是只读的(它不会被用作Camel路由进程的最终目的地),所以我真的不需要生成器(如果系统由于配置错误而仍然尝试执行它,它应该抛出RuntimeException) . 一个合适的例子是camel-atom endpoints - 你可以读取feed但是(从1.6.0开始)你不能发布一个 .
同样,您只需要一个只写 endpoints 的 生产环境 者,该 endpoints 不接收来自外部系统的数据(例如日志记录) .
生产环境 者扩展了处理器,这意味着它也有一个处理方法 .
查看Camel in Action一书中的免费第1章,该书讲述了一些Camel概念 . http://www.manning.com/ibsen/
本教程也非常出色,因为它以稳定的步伐引入了这些概念http://camel.apache.org/tutorial-example-reportincident.html