0

我有一条骆驼路线在 JMS(activemq)队列上消耗,目标是以请求/回复方式调用。在这条路由中,我拆分消息并调用另一个 activemq 队列(也以请求/回复的方式)。

这是显示情况的最小路线

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

问题是 Camel 没有设置新的 JMSCorrelationId(因为传入消息中已经有一个)。如果什么都不做,您会收到带有未知相关 ID 的响应,并且交换永远不会结束。

我没有详细说明,但我的猜测是相同的临时队列用于孔拆分器,但它(逻辑上)期望每条消息都有不同的相关 ID。所有使用相同,它收到第一个,不知道如何处理其他人。

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

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

4

1 回答 1

1

本质上,您的案例在此Jira 问题中有所描述。 似乎 2.11 中会增加一个功能,您可以要求 Camel 创建一个新的 corr-id。

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

当然,您也可以在第二个端点上使用“useMessageIDAsCorrelationID”选项。

于 2012-11-06T07:05:04.743 回答