在apache camel中处理器之间传递值

时间:2012-04-26 09:47:52

标签: apache-camel

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

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

4 个答案:

答案 0 :(得分:50)

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

您可能需要阅读“Camel in Action”一书的免费第1章,因为它涵盖了使用Exchange,Message等的Camel概念。

答案 1 :(得分:27)

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

  • 路线内的元数据:属性
  • 来自外部的元数据:标题

答案 2 :(得分:20)

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

  • 使用Exchange属性获取有关消息的常规元数据(使用频率较低)
  • 使用IN消息标头配置端点属性或有关消息正文的元数据(经常使用)
  • 将IN消息正文用于消息的有效负载(最常用)
  • 仅在必要时创建OUT消息,以便在处理期间保持单独的IN与OUT消息(默认情况下仅使用IN)

那就是说,它实际上取决于跟随处理器的组件。大多数都有一些使用端点所需的标题和/或正文值等。有关这些详细信息,请参阅具体的component page

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

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

答案 3 :(得分:2)

答案在这里:

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