Apache camel 如何使用Camel客户端和IBMMQ代理设置JMSCorrelationID并与JMSMessageID关联

Apache camel 如何使用Camel客户端和IBMMQ代理设置JMSCorrelationID并与JMSMessageID关联,apache-camel,ibm-mq,camel-jms,Apache Camel,Ibm Mq,Camel Jms,我有一个Camel客户端,它使用JMS组件连接IBMMQ 我需要 发送一个带有固定值的JMSCOrrationId 通过JMSMessageID关联回复消息 我的配置是: .setHeader("CamelJmsDestinationName", "queue:///requestQueue.AQ?targetClient=1") .setHeader("JMSCorrelationID", "SomeValue"

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

我需要

  • 发送一个带有固定值的JMSCOrrationId
  • 通过JMSMessageID关联回复消息
我的配置是:

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

问题在于,当useMessageIDAsCorrelationID=true时,JMSCorrelationID为null

  JMSMessageID:     ID:c3e2d840d8d4e3f14040404040404040d95c7873193bef06
  JMSTimestamp:     1614870096440
  JMSCorrelationID: null

当useMessageIDAsCorrelationID=false时,JMSCorrelationID被设置为预期的,但我得到了一个相关超时。如何使用两者?

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

  • exchangePattern=InOnly
  • includeSentJMSMessageID=true
然后使用JMSCorrelationID发送消息,但不等待回复。此后,我使用由代理创建的JMSMessageID(由JMS选择器过滤)使用简单表达式动态设置pollRich()

  • 选择器=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}")

为什么要设置
targetClient=1
?这指示IBM MQ删除包含JMS头的MQ RFH2头。另一端有Cobol程序需要消息作为MQStr,无法处理MQ RFH2