在 Apache Camel 中,从一个 Exchange 处理器传递值到另一个处理器的最佳方式是什么(以及为什么):
- 将其存储在 Exchange 头信息中
- 在构建路由时使用
setProperty
方法 - 其他方式...
setProperty
方法本文中未提到的一个区别是,在Camel中,属性将安全地存储在整个消息处理过程中,而标头则是消息协议的一部分,可能在路由期间不会被传播。例如,JMS存在对头文件存储内容的限制。
您可能希望阅读《Camel实战》书籍的免费第1章,因为它涵盖了Exchange、Message等Camel概念。
属性和头部基本上相同。但是,特定组件(如Jms)会将标头转换为特定协议的标头。因此,
Exchange 在处理器之间传递,它包含属性、IN 消息和可选的 OUT 消息。其中每个都能存储对象数据,但通常来说:
尽管如此,实际上还取决于接下来被调用的组件。大多数组件都具有一些必须使用端点所需的标题和/或正文值等。有关这些详细信息,请参见特定的组件页面。
此外,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
答案如下:
属性:属性是一个Map,看起来像消息头。 主要区别在于它们的生命周期:属性存在于整个交换执行期间,而标头仅限于消息持续时间(并且消息在路由期间可能会发生很多变化,因此在交换执行期间)。 Camel本身可能会为某些用例添加一些属性。
marshal().xstream()
将Map序列化到主体中。 - рüффп