在 apache camel 中跨不同的 camel 上下文传递 属性 值

Passing a property value across different camel Context in apache camel

如何将 camel 中的属性传递给不同的 camel 上下文?我当前的体系结构将处理 4 种不同类型的消息(A、B、C、D),它仅在保存时对所有消息使用相同的路由,根据消息类型更改 DB table 名称,但现在我有要求我只需要从交换对象中为特定消息保存几个值。我正在考虑在路由中设置 属性 并且消息类型是 'E' 我会将其定向到另一条路由。但是如何将 属性 值传递给不同的骆驼上下文

我不知道你是不是指应用程序属性(例如在 Java property files) or an Exchange property 和 Camels Exchange object 中包装消息。

但是,这听起来像是后者,因为应用程序属性通常不会传递。

Exchange 属性只是 Camel 在处理过程中围绕消息 包装的一部分。如果您在路由处理期间向另一个端点发送消息,如 .to(endpoint),通常只会发送 消息 并且 Exchange 被丢弃.

from(endpoint)
    .setProperty("myProperty", value)
    .to("activemq:queue:myQueue")
    // myProperty is no more available at myQueue

当然有例外,这取决于端点类型。例如,当发送到直接端点(同步 Camel in-memory 端点)时,Exchange 仍然存在。但是直接端点不适用于不同的 Camel 上下文。对于 HTTP、JMS 等其他端点类型,属性将丢失。

因此,如果你想设置一个"message variable"被传递给其他端点,特别是在不同的Camel上下文中,你必须设置一个消息header

from(endpoint)
    .setHeader("myHeader", value)
    .to("activemq:queue:myQueue")
    // myHeader is still available at myQueue