35

我很难理解这个概念。

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

我是否正确理解生产者负责将消息发送到该端点EndpointConsumer从该端点接收它们?

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

在对骨架实现设置测试时,在端点和生产者对象上Camel调用。之后它返回,没有对消费者或与之关联的处理器做任何事情。createProducer()process()

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

4

3 回答 3

59

重要的是要记住,Endpoint由 a Component(即端点工厂)创建的 a 可以位于Camel的Route一端。如果将Component放在路由的开头,则必须有ComponentConsumer部分的实现。这可以将特定的输入/请求(如 HTTP 请求)转换为通用的东西——骆驼——可以沿着Route传播。而如果您将Component放在路由的末尾,那么您必须有一个. Producer负责从路线的尽头进行ExchangeExchangeProducer并将其转换为特定的东西(如 JMS 消息)。

我发现 Fuse ESB 文档(通常)比Apache Camel 网站更好。从Fuse ESB 组件页面

消费者端点消费请求。它们总是出现在路由的开头,它们封装了负责接收传入请求和分派传出回复的代码。

生产者端点产生请求。它们总是出现在路由的末尾,它们封装了负责分派传出请求和接收传入回复的代码。


在此处输入图像描述

于 2013-10-31T12:12:57.123 回答
21

我终于通过查看 Stream 组件弄清楚了。

事实证明,我错误地认为端点是一切都必须通过的中心。

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

由于我的端点是只读的(它不会用作 Camel 路由过程的最终目的地),我真的不需要生产者(如果系统由于配置错误而仍然尝试这样做,它应该抛出 RuntimeException)。一个合适的例子是骆驼原子端点——你可以阅读提要,但(从 1.6.0 开始)你不能发布一个。

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

于 2010-01-23T16:02:51.203 回答
8

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

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

而且本教程也非常出色,因为它以稳定的速度介绍了这些概念 http://camel.apache.org/tutorial-example-reportincident.html

于 2010-01-22T18:50:31.190 回答