在Apache Camel reout中设置ReplyToQMgr和ReplyToQ以使用IBM MQ接收COA

ttcibm8c  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(272)

我正在使用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比较陌生,所以任何输入都将非常感谢。提前感谢!

bz4sfanl

bz4sfanl1#

在您的应用程序中,只需提供ReplyToQ的名称replyToQ1,并将ReplyToQMgr字段留空,队列管理器将为您填写本地队列管理器名称QMGR_LOC
并在QMGR_REC上执行以下操作之一:-
1.如果从QMGR_REMQMGR_LOC的通道的传输队列的名称正好是QMGR_LOC,那么您就没有什么要做的了。当QMGR_REM将COA放到队列管理器QMGR_LOC上的队列replyToQ1上时,它会将其解析为名称为QMGR_LOC的传输队列,然后通道会将其发送出去。
1.如果从QMGR_REMQMGR_LOC的通道的传输队列没有准确命名为QMGR_LOC,则对QMGR_REM进行以下定义:

DEFINE QREMOTE(QMGR_LOC) RNAME(' ') RQMNAME(QMGR_LOC) +
       XMITQ(your-transmission-queue-going-to-QMGR_LOC)
lnxxn5zx

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")

相关问题