FTE 代理可以使用标准 QMgr 路由和别名。教科书的方法是在目标 QMgr 之后命名传输队列并添加别名。例如,在 QMGRA 上,您可以定义:
* On QMGRA
DEFINE QL(QMGRB) USAGE(XMITQ)
DEFINE QR(QMGRC) XMITQ(QMGRB) RQMNAME('') RNAME('')
现在,任何发往 QMGRC 的消息都会经过正常的名称解析。由于 QRemote,QMgr 通过 QMGRB 找到到 QMGRC 的路由。因此,具有空白 RNAME 的 QRemote 定义称为 QMgr 别名。
然后在 QMGRB 上,您将有一个传输队列通向 QMGRC,并且巧合地命名为 QMGRC。反过来将适用于获取消息。您需要 C 上的 QMgr 别名指向 B。
如果您的 XMit 队列不使用远程 QMgr 的名称,那么您需要额外的 QMgr 别名。例如,许多人将字符串 XMITQ 附加到 XMit 队列名称(我认为这会导致比它解决的问题更多的问题),并且在这样的系统上,您需要以下内容:
* On QMGRA
DEFINE QL(QMGRB.XMITQ) USAGE(XMITQ)
DEFINE QR(QMGRC) XMITQ(QMGRB.XMITQ) RQMNAME('') RNAME('')
* On QMGRB
DEFINE QL(QMGRC.XMITQ) USAGE(XMITQ)
DEFINE QR(QMGRC) XMITQ(QMGRC.XMITQ) RQMNAME('') RNAME('')
第一部分的工作方式与以前相同。WMQ 查找 QMGRC,找到 QRemote 并将消息放到命名的 XMitQ 上。但是当消息到达 QMGRB 时,它无法直接解析到传输队列,因为名称与远程 QMgr 不匹配。因此,我们定义了一个新的 QRemote,它将名称 QMGRC 解析为通向 QMGRC 的 XMitQ。
您还可以在 QMGRA 和 QMGRB 之间使用集群解析。在这种情况下,您可能可以通过设置 RQMNAME 并将 A 上的 QMgr 别名上的 XMitQ 留空。或者同时设置两者。另一种选择是在 B 上创建一个名为 QMGRC 的 QMgr 别名并将其通告给集群。
使用专用通道使文件传输流量远离集群 XMitQ 和集群通道,因此提供了与常规流量隔离的一类服务。但是,文件传输流量都是非持久的,每次在 XMitQ 上最多只有一个帧/文件,因此您可能不需要那种级别的隔离。(使用 WMQ V7.5 可以对重叠集群和拆分集群 XMitQ 做同样的事情!)
您不需要 FTE 代理对此进行测试,只需使用SupportPac MA01中的 Q 程序并在连接时指定本地 QMgr 和远程 QMgr 名称。
来自电子邮件线程的更新:
好的,这里是我使用集群场景模拟它的定义。我定义了 3 个 QMgrs,创建了一个集群,其中 QMGRA 作为存储库,QMGRB 作为成员,并使用 SDR/RCVR 通道创建了 QMGRB 和 C 之间的网关。任何从 A 到达 B 并发送到 C 的消息都会解析到 XMitQ。A 知道 C,因为名为 QMGRC 的 QMgr 别名指向 QMGRC.XMITQ。(我尝试将一个名为 QMGRC 的 XMitQ 广告到集群,但似乎集群将其识别为本地队列并且不对其执行 QMgr 名称解析。将其定义为 QMGRC.XMITQ 并在其上创建 QMGRC QMgr 别名允许 QMGRC 解析本地和集群。)
运行这些之后,我能够使用 Q 程序进行连接,而无需使用指定 RNAME 的 QREMOTE 定义,并将消息从 C 发送到 A 以及从 A 到 C 发送到名为 TEST.NAME.RESOLUTION 的队列中,如下所示:
C:\Users\T.Rob>q -m QMGRA -oQMGRC/TEST.NAME.RESOLUTION
MQSeries Q Program by Paul Clarke [ V6.0.0 Build:May 1 2012 ]
Connecting ...connected to 'QMGRA'.
>Testing A to C
>^C
C:\Users\T.Rob>q -m QMGRC -oQMGRA/TEST.NAME.RESOLUTION
MQSeries Q Program by Paul Clarke [ V6.0.0 Build:May 1 2012 ]
Connecting ...connected to 'QMGRC'.
>Testing C to A
>^C
是的,集群名称是“EDELMANN”,在这种用法中,它的发音就像 Jerry Seinfeld 用来发音“Newman”一样。;-)
* On QMGRA:
ALTER QMGR +
REPOS(EDELMANN)
DEFINE QLOCAL('TEST.NAME.RESOLUTION') +
DEFPSIST(YES) +
REPLACE
DEFINE CHANNEL('EDELMANN.QMGRA') +
CHLTYPE(CLUSRCVR) +
CLUSTER('EDELMANN') +
CONNAME('localhost(3414)') +
TRPTYPE(TCP) +
REPLACE
* On QMGRB:
DEFINE QREMOTE('QMGRC') +
CLUSTER('EDELMANN') +
RQMNAME('QMGRC') +
XMITQ('QMGRC.XMITQ') +
REPLACE
DEFINE QLOCAL('QMGRC.XMITQ') +
INITQ('SYSTEM.CHANNEL.INITQ') +
TRIGGER +
TRIGDATA('QMGRB.QMGRC') +
USAGE(XMITQ) +
REPLACE
DEFINE CHANNEL('EDELMANN.QMGRA') +
CHLTYPE(CLUSSDR) +
CLUSTER('EDELMANN') +
CONNAME('localhost(3414)') +
TRPTYPE(TCP) +
REPLACE
DEFINE CHANNEL('EDELMANN.QMGRB') +
CHLTYPE(CLUSRCVR) +
CLUSTER('EDELMANN') +
CONNAME('localhost(3415)') +
TRPTYPE(TCP) +
REPLACE
DEFINE CHANNEL('QMGRB.QMGRC') +
CHLTYPE(SDR) +
CONNAME('localhost(3416)') +
TRPTYPE(TCP) +
XMITQ('QMGRC.XMITQ') +
REPLACE
DEFINE CHANNEL('QMGRC.QMGRB') +
CHLTYPE(RCVR) +
TRPTYPE(TCP) +
REPLACE
* On QMGRC:
DEFINE QREMOTE('QMGRA') +
RQMNAME('QMGRA') +
XMITQ('QMGRB') +
REPLACE
DEFINE QLOCAL('QMGRB') +
INITQ('SYSTEM.CHANNEL.INITQ') +
TRIGGER +
TRIGDATA('QMGRC.QMGRB') +
USAGE(XMITQ) +
REPLACE
DEFINE QLOCAL('TEST.NAME.RESOLUTION') +
REPLACE
DEFINE CHANNEL('QMGRB.QMGRC') +
CHLTYPE(RCVR) +
TRPTYPE(TCP) +
REPLACE
DEFINE CHANNEL('QMGRC.QMGRB') +
CHLTYPE(SDR) +
CONNAME('localhost(3415)') +
TRPTYPE(TCP) +
XMITQ('QMGRB') +
REPLACE