远程队列管理器别名未按预期工作

时间:2012-08-12 20:02:10

标签: ibm-mq

我在三个系统上设置了MQ7.0:A,B和C. A - > B有发送者 - 接收者信道(A.B)和B-> C,有发送者 - 接收者信道(B.C)。传输队列名称相同。队列管理器的名称分别为QMA,QMB和QMC。 现在我在系统C上有一个队列QC。 我在系统A上定义了一个远程队列定义: 定义qremote(RQ)rname(QC)rqmname(第三个)xmitq(A.B)

我在系统B上有一个定义远程队列mgr定义: define qremote(third)rname('')rqmname(QMC)xmitq(B.C)

现在当我将消息发送到A上的远程队列RQ时,我预期它应该通过tx队列(AB)上的通道传输到具有传输头“QC on third”的系统B,因为第三个是别名作为QMC所以这个消息应该被放到tx BC并且应该在系统C上到达Queue QC。 但在我发出消息后,它就丢失了。我对远程队列mgr别名的理解是错误的。有人可以提供更好的例子。

1 个答案:

答案 0 :(得分:1)

试试这个:

关于QMA

DEF QR(QMC) RQMNAME(' ')   RNAME(' ') XMITQ(QMB)
DEF QR(QC)  RQMNAME('QMC') RNAME(' ') XMITQ('QMB')
DEF QL(QMB) USAGE(XMITQ) TRIGTYPE(FIRST) TRIGGER
* Channel def goes here

QRemote是一个QMgr别名。它指定QMC的路径通过QMB XMitQ。一旦定义了这个,任何发往QMC的东西都将解析为QMB XMitQ。空白RNAMERQMNAME是使其成为QMgr别名而不是经典远程队列定义的原因。此时,如果您使用像Q程序这样的工具,它允许您指定要与用于OPEN命令的QMgr分开连接的QMgr,则甚至不需要QRemote。任何发往QMC的消息现在将解析为QMB。

但是,如果你想使用像amqsput这样不太复杂的东西,那么你真的需要一个QRemote。 DEF QR(QC完成了这一点。如果您愿意使用QRemotes,那么您实际上并不需要QMgr别名。这只是说“如果有人打开一个名为QC的队列,则将其发送到QC上的QMC并将其放在QMB XMitQ上。

关于QMB

DEF QL(QMC) USAGE(XMITQ) TRIGTYPE(FIRST) TRIGGER
* Channel def goes here

当QMB到达QMC时,他们将自动解析到XMitQ,无需任何进一步的定义或指导。

关于QMC

DEF QL(QC)

最后,消息到达QC发送给QC,因此您需要一个QLocal才能登陆。

名称解析有点复杂但是一旦你理解了它,你就会非常了解WMQ寻址。我建议您坐下来Name Resolution Infocenter topic并协调您所看到的行为。

顺便说一句,您的定义中的差异似乎是您的QRemote使用了频道的名称而不是XMitQ。有一点你说“传输队列名称是相同的。队列管理器的名称分别为QMA,QMB和QMC。”所以我希望在B上找到一个名为QMC的XMitQ,为QMB.QMC频道提供服务。但是稍后您将QMgr别名定义为define qremote(third) rname('') rqmname(QMC) xmitq(B.C),其应为XMITQ(QMC)