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

Apache camel 在ApacheCamel中跨不同的camel上下文传递属性值,apache-camel,blueprint-osgi,Apache Camel,Blueprint Osgi,如何将camel中的属性传递给不同的camel上下文?我当前的体系结构将处理4种不同类型的消息(A、B、C、D),它仅在保存时对所有消息使用相同的路由。它会根据消息类型更改DB表名称,但现在我有一个要求,即我只需要为特定消息保存exchange对象中的几个值。我正在考虑在路由中设置一个属性,消息类型为“E”,我将把它定向到另一个路由。但是我如何将属性值传递给不同的camel上下文呢?我不知道您指的是应用程序属性(如in)还是用于包装消息的as-in Camels交换对象 然而,这听起来像是后者,

如何将camel中的属性传递给不同的camel上下文?我当前的体系结构将处理4种不同类型的消息(A、B、C、D),它仅在保存时对所有消息使用相同的路由。它会根据消息类型更改DB表名称,但现在我有一个要求,即我只需要为特定消息保存exchange对象中的几个值。我正在考虑在路由中设置一个属性,消息类型为“E”,我将把它定向到另一个路由。但是我如何将属性值传递给不同的camel上下文呢?我不知道您指的是应用程序属性(如in)还是用于包装消息的as-in Camels交换对象

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

在处理过程中,Exchange属性只是消息的骆驼包装的一部分。如果在路由处理过程中使用
.to(endpoint)
将消息发送到另一个端点,通常只发送消息,而交换被丢弃

from(endpoint)
    .setProperty("myProperty", value)
    .to("activemq:queue:myQueue")
    // myProperty is no more available at myQueue
from(endpoint)
    .setHeader("myHeader", value)
    .to("activemq:queue:myQueue")
    // myHeader is still available at myQueue
当然也有例外,这取决于端点类型。例如,当发送到直接端点(内存中的同步骆驼端点)时,交换仍然存在。但直接端点不能跨不同的上下文工作。对于HTTP、JMS等其他端点类型,属性丢失

因此,如果您想设置一个传递给其他端点的“消息变量”,特别是在不同的Camel上下文中,您必须设置一个消息头

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

我不知道您是指应用程序属性(如in)还是用于包装消息的as-in-Camels交换对象

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

在处理过程中,Exchange属性只是消息的骆驼包装的一部分。如果在路由处理过程中使用
.to(endpoint)
将消息发送到另一个端点,通常只发送消息,而交换被丢弃

from(endpoint)
    .setProperty("myProperty", value)
    .to("activemq:queue:myQueue")
    // myProperty is no more available at myQueue
from(endpoint)
    .setHeader("myHeader", value)
    .to("activemq:queue:myQueue")
    // myHeader is still available at myQueue
当然也有例外,这取决于端点类型。例如,当发送到直接端点(内存中的同步骆驼端点)时,交换仍然存在。但直接端点不能跨不同的上下文工作。对于HTTP、JMS等其他端点类型,属性丢失

因此,如果您想设置一个传递给其他端点的“消息变量”,特别是在不同的Camel上下文中,您必须设置一个消息头

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

您是否正在使用OSGiBlueprint,并且具有不同上下文的不同OSGi捆绑包?如果是这样的话,您可以使用直接vm组件进行跨平台调用。您是否使用OSGi蓝图,并且具有不同上下文的不同OSGi捆绑包?如果是这样的话,您可以使用direct vm组件进行跨路由调用。是的,我可以使用头将值传递给不同的路由。谢谢你的帮助!!是的,我能够使用头将值传递给不同的路由。谢谢你的帮助!!