试试这个:
在 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 的别名。它指定通过 QMB XMitQ 的 QMC 路径。一旦定义好,任何发往 QMC 的东西都将解析为 QMB XMitQ。空白RNAME
和RQMNAME
是什么使它成为 QMgr 别名而不是经典的远程队列定义。此时,如果您使用 Q 程序之类的工具,它允许您指定要连接的 QMgr 与用于OPEN
命令的 QMgr 分开,您甚至不需要QRemote
. 任何发往 QMC 的消息现在都将解析为 QMB。
但是,如果您想使用不太复杂的东西,amqsput
那么您确实需要一个 QRemote。DEF QR(QC
做到了这一点。如果您愿意使用 QRemotes,那么您实际上并不需要 QMgr 别名。这只是说“如果有人打开一个名为的队列QC
,则将其寻址到QC
onQMC
并将其放在QMB
XMitQ 上。
在 QMB 上
DEF QL(QMC) USAGE(XMITQ) TRIGTYPE(FIRST) TRIGGER
* Channel def goes here
在 QMB 上,当消息到达 QMC 时,它们将自动解析到 XMitQ,而无需任何进一步的定义或指导。
在 QMC 上
DEF QL(QC)
最后,消息到达 QMC,地址为 QC,因此您需要一个 QLocal 才能让它们登陆。
名称解析有点复杂,但是一旦你理解了它,你就几乎理解了 WMQ 寻址。我建议坐下来讨论名称解析信息中心主题,并重新考虑您所看到的行为。
顺便说一句,您的定义中的差异似乎是您的 QRemote 使用了频道的名称而不是 XMitQ。有一次您说“传输队列名称相同。队列管理器的名称分别为 QMA、QMB 和 QMC。” 所以我希望在 B 上找到一个名为QMC
服务 QMB.QMC 频道的 XMitQ。但稍后您将 QMgr 别名定义为define qremote(third) rname('') rqmname(QMC) xmitq(B.C)
应该是XMITQ(QMC)
.