首页 文章

在Apache Camel路由中处理传入的JMSCorrelationId

提问于
浏览
0

我有一个消耗JMS(activemq)队列的camel路由,目标是以请求/回复方式调用 . 在此路由中,我拆分消息并调用另一个activemq队列(也以请求/回复方式) .

这是一个显示情况的最小路线

<route>
   <from uri="activemq:A" />
   <split>
      <xpath>/root/subpart</xpath>
      <inOut uri="activemq:B" />
   </split>
</route>

问题是Camel没有设置新的JMSCorrelationId(因为传入消息中已有一个) . 如果没有做任何事情,你会获得具有未知correlationId的响应,并且交换永远不会结束 .

我没有详细介绍,但我的猜测是,相同的temporaryQueue用于分孔器,但它(逻辑上)期望每个消息有不同的相关ID . 所有使用相同的,它收到第一个,不知道如何处理其他人 .

什么是处理这种情况的最佳解决方案?

我发现工作的一个是在另一个头中保存传入的JMSCorrelationId(不确定我需要),并删除它 . 这并不像我希望的那样干净,但我想不出别的东西 . 有任何想法吗 ?

1 回答

  • 1

    基本上,你的情况在Jira issue中描述似乎在2.11中会有一个补充,你可以要求Camel创建一个新的corr-id .

    那么,与此同时,为什么不继续你的工作 - 在将它发送到"activemq:B"之前删除JMSCorrelationId头 <removeHeader headerName="JMSCorrelationId" /> ?我想这是目前最好的解决方案 .

    当然,您也可以在第二个 endpoints 上使用“useMessageIDAsCorrelationID”选项 .

相关问题