2

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

我在系统 B 上有一个定义远程队列管理器定义为:define qremote(third) rname('') rqmname(QMC) xmitq(BC)

现在,当我将消息发送到 A 上的远程队列 RQ 时,我所期望的是,它应该通过系统 B 上的 tx 队列(AB)上的通道以“第三个 QC”的传输标头传送到系统 B,因为第三个别名为 QMC 所以这条消息应该被放到 tx BC 并且应该到达系统 C 上的队列 QC。但是在我放入消息之后,它就丢失了。我对远程队列管理器别名的理解是否错误。谁能举个更好的例子。

4

1 回答 1

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 的别名。它指定通过 QMB XMitQ 的 QMC 路径。一旦定义好,任何发往 QMC 的东西都将解析为 QMB XMitQ。空白RNAMERQMNAME是什么使它成为 QMgr 别名而不是经典的远程队列定义。此时,如果您使用 Q 程序之类的工具,它允许您指定要连接的 QMgr 与用于OPEN命令的 QMgr 分开,您甚至不需要QRemote. 任何发往 QMC 的消息现在都将解析为 QMB。

但是,如果您想使用不太复杂的东西,amqsput那么您确实需要一个 QRemote。DEF QR(QC做到了这一点。如果您愿意使用 QRemotes,那么您实际上并不需要 QMgr 别名。这只是说“如果有人打开一个名为的队列QC,则将其寻址到QConQMC并将其放在QMBXMitQ 上。

在 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).

于 2012-08-12T22:35:49.520 回答