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

Apache camel 在apache camel中的处理器之间传递值,apache-camel,Apache Camel,在apache camel中,哪种方法是将值从exchange处理器传递到另一个处理器的最佳方法(以及原因): 将其存储在exchange标头中 在构建管线时使用setProperty方法 另一种方式 在处理器之间传递。它包含属性、消息内和可选消息外。其中每个都能够存储对象数据,但通常: 将Exchange属性用于有关邮件的常规元数据(使用频率较低) 使用消息头中的来配置端点属性或有关消息体的元数据(经常使用) 使用消息正文作为消息的有效负载(最常用) 仅当需要在处理过程中维护单独的输入和输

在apache camel中,哪种方法是将值从exchange处理器传递到另一个处理器的最佳方法(以及原因):

  • 将其存储在exchange标头中
  • 在构建管线时使用
    setProperty
    方法
  • 另一种方式
在处理器之间传递。它包含属性、消息内和可选消息外。其中每个都能够存储对象数据,但通常:

  • 将Exchange属性用于有关邮件的常规元数据(使用频率较低)
  • 使用消息头中的来配置端点属性或有关消息体的元数据(经常使用)
  • 使用消息正文作为消息的有效负载(最常用)
  • 仅当需要在处理过程中维护单独的输入和输出消息时,才创建输出消息(默认情况下,仅使用输入)
也就是说,这实际上取决于名为跟踪处理器的组件。大多数都有一些使用端点等所需的标题和/或主体值。有关这些详细信息,请参阅特定的

此外,交换/消息在以下页面中有更详细的说明:


属性和标题基本相同。但是,在某些组件(如Jms)上,头被转换为特定于协议的头或从特定于协议的头转换而来。所以

  • 路由中的元数据:属性
  • 外部元数据:标题

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

您可能想阅读《骆驼行动手册》的免费第1章,因为它涵盖了骆驼的交换、消息等概念。

答案如下:

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

+1这是一个重要的区别。一般来说,如果您希望确保所设置的数据将在您想要的地方结束,那么我强烈建议您使用属性。在过去,有人在我传递头中存储的信息的路线中间添加了一个JMS步骤,而这些信息只是停止了传递。在JMS的情况下,属性根本不会传播,建议使用头来传递信息。这不是正确的吗?或者我遗漏了什么?也许是术语。JMS body+属性是JMS术语。在Camel中,它的主体+消息上的头,以及Exchange上的属性。Camel映射body->body和headers->JMS属性。JMSProperties似乎不支持将Java集合作为一种类型。如果您需要为同一标题提供多个值,则应考虑这一点。我们找到的唯一方法是在发送到队列端点之前,使用
marshal().xstream()
序列化主体中的映射。安全吗?您的意思是设置不同的属性仅在当前处理中看到?只是要补充一点,在路由的整个生命周期中,交换是相同的,但消息可能会更改,例如,如果消息从一种格式转换为另一种格式(从活动中的驼峰)。