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

kga*_*ron 25 apache-camel

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

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

Cla*_*sen 52

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

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

  • +1这是一个重要的区别.一般来说,如果你想确定你设置的数据最终会在你想要的地方结束,那么我强烈建议你使用这些属性.在过去,我被这个烧了,有人在路径中间添加了一个JMS步骤,我在其中传递存储在标题中的信息,信息刚刚停止通过. (12认同)
  • 也许它的条款。JMS body + properties 是 JMS 术语。在 Camel 中,它的正文 + Message 上的标题和 Exchange 上的属性。Camel 映射 body -> body 和 headers -> JMS 属性。 (2认同)

Pet*_*der 27

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

  • 路径中的元数据:属性
  • 来自外部的元数据:标题


Ben*_*Day 21

交易所在处理器之间传递.它包含属性,IN消息和可选的OUT消息.其中每个都能够存储对象数据,但一般情况下:

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

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

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

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


Ada*_*lík 7

答案在这里:

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