29

在 apache camel 中,哪一个是将值从交换处理器传递到另一个(以及为什么)的最佳方式:

  • 将其存储在交换标头中
  • setProperty在构建路线时使用该方法。
  • 其他方式..
4

4 回答 4

60

Ben 和 Petter 没有提到的一个区别是,在 Camel 中处理消息的整个过程中,属性都是安全存储的。相反,标头是消息协议的一部分,并且可能不会在路由期间传播。例如,JMS 限制了您可以存储为标题等的内容。

您可能想阅读 Camel in Action 一书的免费第 1 章,因为它涵盖了 Exchange、Message 等的 Camel 概念。

于 2012-04-27T13:52:04.953 回答
30

属性和标题几乎相同。但是,标头转换为/从某些组件(例如 Jms)上的协议特定标头转换。所以,

  • 路由内的元数据:属性
  • 进出外部的元数据:标头
于 2012-04-26T21:58:06.867 回答
23

交换在处理器之间传递。它包含属性、IN 消息和可选的 OUT 消息。它们中的每一个都能够存储对象数据,但通常:

  • 使用 Exchange 属性获取有关消息的一般元数据(使用频率较低)
  • 使用 IN 消息头来配置端点属性或关于消息体的元数据(经常使用)
  • 使用 IN 消息体作为消息的有效负载(最常用)
  • 仅在必要时创建 OUT 消息以在处理期间维护单独的 IN 和 OUT 消息(默认情况下仅使用 IN)

也就是说,它实际上取决于在您的处理器之后调用的组件。大多数都有一些使用端点等所需的标头和/或正文值。有关这些详细信息,请参阅特定组件页面

此外,在这些页面上更详细地解释了交换/消息:

http://camel.apache.org/maven/current/camel-core/apidocs/org/apache/camel/Exchange.html

http://fusesource.com/docs/router/2.8/prog_guide/MsgFormats-Exchanges.html

于 2012-04-26T16:25:25.950 回答
7

答案在这里:

属性:属性是一个 Map,可能看起来像消息头。主要区别在于它们的生命周期:属性存在于整个交换执行期间,而标头仅限于消息持续时间(并且消息在路由期间可能会发生很大变化,因此在交换执行期间)。Camel 本身可能会为某些用例添加一些属性。

于 2018-06-14T15:10:50.407 回答