2

我正试图围绕 Apache Camel 展开思考,今天早上花了一些时间阅读了在线 Camel 文档和 Javadocs 之后,我有一些问题似乎无法找到答案。

  1. 是否所有端点都是消费者或生产者(或两者兼而有之)?所有处理器都是端点是真的吗?是否有任何不是处理器的端点?
  2. Message header 和 Exchange 之间有什么区别?交换被认为是“消息容器”,但它与标头包含的元数据有何不同?
  3. 实现自己的消息/交换是否很典型?如果是这样,这样做的例子是什么,并且“偏离”了典型的DefaultMessageand DefaultExchange

提前致谢。

4

2 回答 2

2

首先要做的事情:一个好的建议是阅读 Camel in Action 一书,它解释了大部分基本概念。在线提供免费的第一章,解释了您提出的问题http://manning.com/ibsen/

  1. 端点引用一个组件和一些特定于组件的选项,例如地址等。然后端点可以(取决于组件)充当消费者(例如"servlet:path/to/web/service")或生产者(例如"http://localhost/path/to/web/service")或两者兼而有之(例如"jms:queue:orderQueue")。

  2. Camel 消息中也有标题。交换比整个路由更长寿,交换属性也将在整个路由中保留。Camel 中的消息头是一个有点不同的概念。它们通常紧密映射到使用的组件 - 即 HTTP 端点可能设置/更改标头(例如 COOKIES 等),而 HTTP 标头对交换属性没有影响,因为它们仅用于骆驼路由和骆驼逻辑。交换还包装了其他非消息特定的东西,例如异常。

  3. 开发新的消息实现并不常见。DefaultMessage当您实现了自己的组件/协议并且需要在消息或诸如此类的东西中保留辅助对象的实例时,扩展可能会有一点意义。即使在开发组件时通常也不会这样做。我从未听说过 Exchange 的任何自定义实现,您通常不应在没有充分理由的情况下这样做。

于 2013-01-07T13:12:23.887 回答
2

@DirtyMikeAndTheBoys 你写道:

所有处理器都是端点是真的吗?是否有任何不是处理器的端点?

这不是真的。Camel 术语中的“处理器”是回调,它是某些模式的一部分(如聚合器、消息通道或 RoutingSlip)。处理器在路由中流动时接收消息并对消息执行某些操作。消息包装在Exchanges中。

端点是路由接收消息的地方(消费者端点)和发送处理过的消息的地方(到端点)。因此,当您在路由中看到“ from ”子句时,Camel 引擎正在使用与“ from ”子句中定义的端点实例相关联的“ Consumer ”实例。这实际上取决于端点实现,是否在骆驼上下文中的“from”子句中出现给定端点的每个地方创建/重用一个新的消费者实例。

Similarly when the same endpoint is mentioned in a 'To' clause, a Producer instance will be used (either created/reused) and will remain associated with the endpoint instance.

于 2013-01-28T00:50:31.487 回答