我正在使用Apache Camel和IBM MQ发送消息。当消息被传递到远程队列时,我需要接收COA。一般情况如下所示:
当消息到达msg_q2队列时,我应该收到返回的COA。因此,问题是我无法将QMGR_REM设置为回复队列管理器,该管理器应该产生COA。https://www.ibm.com/docs/en/ibm-mq/8.0?topic=messages-reply-queue-queue-manager
我尝试设置JMS_IBM_MQMD_xxx头,但是由于某些原因,这些头被省略或忽略(被Camel?忽略),并且由于未指定回复队列,消息无法放到队列中。此外,我尝试将JMSReplyTo头设置为queue://reply-to-qmgr/reply-to-q
。在这种情况下,queue://
部分被删除,其余部分被简单地设置为回复队列名称。
我对Apache Camel和IBM MQ比较陌生,所以任何输入都将非常感谢。提前感谢!
2条答案
按热度按时间bz4sfanl1#
在您的应用程序中,只需提供ReplyToQ的名称
replyToQ1
,并将ReplyToQMgr字段留空,队列管理器将为您填写本地队列管理器名称QMGR_LOC
。并在
QMGR_REC
上执行以下操作之一:-1.如果从
QMGR_REM
到QMGR_LOC
的通道的传输队列的名称正好是QMGR_LOC
,那么您就没有什么要做的了。当QMGR_REM
将COA放到队列管理器QMGR_LOC
上的队列replyToQ1
上时,它会将其解析为名称为QMGR_LOC
的传输队列,然后通道会将其发送出去。1.如果从
QMGR_REM
到QMGR_LOC
的通道的传输队列没有准确命名为QMGR_LOC
,则对QMGR_REM
进行以下定义:lnxxn5zx2#
所以,基本上通过反复试验,我发现在
CamelJmsDestinationName
Camel头上添加mdWriteEnabled=true
属性可以使它按我的需要工作。代码如下所示:
route.setHeader("CamelJmsDestinationName", "queue:///msg_q1?targetClient=1&mdWriteEnabled=true")
然后通过MQMD属性设置回复队列管理器
route.setHeader("JMS_IBM_MQMD_ReplyToQMgr", "QMGR_REM")
和回复队列
route.setHeader("JMSReplyTo", "replyToQ2")