Apache camel 如何使用Camel客户端和IBMMQ代理设置JMSCorrelationID并与JMSMessageID关联
我有一个Camel客户端,它使用JMS组件连接IBMMQ 我需要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"
- 发送一个带有固定值的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
- 选择器=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