Apache camel 如何在ApacheCamel中从标头值设置队列名称

Apache camel 如何在ApacheCamel中从标头值设置队列名称,apache-camel,activemq,spring-dsl,Apache Camel,Activemq,Spring Dsl,我正试图从头值设置activemq队列名称,但下面没有发生是我的错误 春季DSL <setHeader headerName="x-so-queue-name" id="_setHeader1"> <xpath resultType="java.lang.String">/Message/@IntObjectName</xpath> </setHeader> <log id="_log1" message="x-so-queue-nam

我正试图从头值设置activemq队列名称,但下面没有发生是我的错误 春季DSL

<setHeader headerName="x-so-queue-name" id="_setHeader1">
   <xpath resultType="java.lang.String">/Message/@IntObjectName</xpath>
</setHeader>
<log id="_log1" message="x-so-queue-name::: ${header.x-so-queue-name}"/>
<to id="_to1" uri="activemq:queue:${header.x-so-queue-name}"/>

/Message/@IntObjectName
日志 16:03:57601 |信息|路由1 | x-so-queue-name:::IDC | so |重新填充|IO

头值正在日志中打印,但队列名称设置为“${header.x-so-queue-name}”为什么它没有检索头的值,我做错了什么吗

  • 将“x-so-queue-name”标头名称替换为名为“CamelJmsDestinationName”的标头

  • 然后在uri中,删除${header.x-so-queue-name}。。您可以放置任何您想要的队列名称,因为ActiveMQ组件将查看报头以确定目标名称。我通常使用以下命令来提醒我正在路由中使用动态队列命名:

  • 参考:

  • 将“x-so-queue-name”标头名称替换为名为“CamelJmsDestinationName”的标头

  • 然后在uri中,删除${header.x-so-queue-name}。。您可以放置任何您想要的队列名称,因为ActiveMQ组件将查看报头以确定目标名称。我通常使用以下命令来提醒我正在路由中使用动态队列命名:


  • 参考资料:

    另请参阅有关动态收件人的常见问题解答:。但最好的解决方案是Matt在下面所说的,即使用CamelJmsDestinationName作为动态队列名称,并在Camel中使用最小的开销。另请参阅关于动态to的常见问题解答:。但最好的解决方案是Matt在下面所说的,使用CamelJmsDestinationName作为动态队列名称,并且在Camel中开销最小。