Apache camel 在apache camel中的处理器之间传递值
在apache camel中,哪种方法是将值从exchange处理器传递到另一个处理器的最佳方法(以及原因):Apache camel 在apache camel中的处理器之间传递值,apache-camel,Apache Camel,在apache camel中,哪种方法是将值从exchange处理器传递到另一个处理器的最佳方法(以及原因): 将其存储在exchange标头中 在构建管线时使用setProperty方法 另一种方式 在处理器之间传递。它包含属性、消息内和可选消息外。其中每个都能够存储对象数据,但通常: 将Exchange属性用于有关邮件的常规元数据(使用频率较低) 使用消息头中的来配置端点属性或有关消息体的元数据(经常使用) 使用消息正文作为消息的有效负载(最常用) 仅当需要在处理过程中维护单独的输入和输
- 将其存储在exchange标头中
- 在构建管线时使用
方法setProperty
- 另一种方式
- 将Exchange属性用于有关邮件的常规元数据(使用频率较低)
- 使用消息头中的来配置端点属性或有关消息体的元数据(经常使用)
- 使用消息正文作为消息的有效负载(最常用)
- 仅当需要在处理过程中维护单独的输入和输出消息时,才创建输出消息(默认情况下,仅使用输入)
属性和标题基本相同。但是,在某些组件(如Jms)上,头被转换为特定于协议的头或从特定于协议的头转换而来。所以
- 路由中的元数据:属性
- 外部元数据:标题
它本身可能会为某些用例添加一些属性。+1这是一个重要的区别。一般来说,如果您希望确保所设置的数据将在您想要的地方结束,那么我强烈建议您使用属性。在过去,有人在我传递头中存储的信息的路线中间添加了一个JMS步骤,而这些信息只是停止了传递。在JMS的情况下,属性根本不会传播,建议使用头来传递信息。这不是正确的吗?或者我遗漏了什么?也许是术语。JMS body+属性是JMS术语。在Camel中,它的主体+消息上的头,以及Exchange上的属性。Camel映射body->body和headers->JMS属性。JMSProperties似乎不支持将Java集合作为一种类型。如果您需要为同一标题提供多个值,则应考虑这一点。我们找到的唯一方法是在发送到队列端点之前,使用
marshal().xstream()
序列化主体中的映射。安全吗?您的意思是设置不同的属性仅在当前处理中看到?只是要补充一点,在路由的整个生命周期中,交换是相同的,但消息可能会更改,例如,如果消息从一种格式转换为另一种格式(从活动中的驼峰)。