0

我有一个使用 JMS 组件连接 IBMMQ 的 Camel 客户端。

我需要

  • 发送一个具有固定值的 JMSCorrelationID。
  • 通过 JMSMessageID 关联回复消息。

我的配置是:

.setHeader("CamelJmsDestinationName", "queue:///requestQueue.AQ?targetClient=1")
.setHeader("JMSCorrelationID", "SomeValue")
.to("jms:queue:requestQueue.AQ?useMessageIDAsCorrelationID=true&replyTo=ResponseQueue")

问题是当 useMessageIDAsCorrelationID=true 时 JMSCorrelationID 为空

  JMSMessageID:     ID:c3e2d840d8d4e3f14040404040404040d95c7873193bef06
  JMSTimestamp:     1614870096440
  JMSCorrelationID: null

当 useMessageIDAsCorrelationID=false 时,JMSCorrelationID 已按预期设置,但相关性超时。两者如何使用?

4

1 回答 1

1

作为解决该问题的一种方法,我对 .to() 端点选项进行了以下更改:

  • 交换模式=InOnly
  • includeSentJMSMessageID=true

然后使用 JMSCorrelationID 发送消息,但无需等待回复。此后,我使用由 JMS 选择器过滤的代理创建的 JMSMessageID 使用简单的表达式动态设置 pollEnrich():

  • 选择器=JMSMessageID='${header.JMSMessageID}

骆驼路线:

.setHeader("CamelJmsDestinationName", "queue:///requestQueue.AQ?targetClient=1")
.setHeader("JMSCorrelationID", "SomeValue")
.to("jms://RequestQueue?useMessageIDAsCorrelationID=false&exchangePattern=InOnly&replyTo=ReplyQueue&includeSentJMSMessageID=true")
.pollEnrich().simple("jms://ReplyQueue?selector=JMSMessageID='${header.JMSMessageID}').timeout(20000)
.log("${body}")
于 2021-03-05T08:46:22.633 回答