2

QMGR A 有一个称为 AgentA 的 MFT 代理。QMGR B 有一个称为 AgentB 的 MFT 代理。QMGR C 有一个称为 AgentC 的 MFT 代理。这些都是 MFT 服务器部署,而不是“客户端”。

QMGR A 和 B 是 MQ 集群的成员,称为 FTECluster

QMGR C 通过一个简单的发送器/接收器对(集群外部)连接到 QMGR B。

运行 QMGR A 的服务器上的 MFT 用户希望将文件从该服务器发送到运行 QMGR C 的服务器。

QMGR B 是指定的协调 Qmgr,所以如果通过资源管理器在那里连接时,我创建一个传输,使用

QMGRA 作为源,QMGRC 作为目标,我是否总是期望代理会遇到 2087 错误(这是我得到的),目标远程队列是未知的?或者是否有一些“额外的”设置需要通过 QMGRB 使 QMGRA 与 QMGRC 相识?

应用程序是这样的:我有基于飞地的队列管理器 (QMGRA),它位于 DMZ(网关,QMGR B)后面,并希望通过 MFT 将外部合作伙伴的文件移动到飞地内部/外部的文件,与我们使用的不同队列将消息从重叠集群或从队列管理器移入/移出集群移动到相邻集群的出/入。或者,允许在 enclave 内的 MFT 用户之间传输文件,这样流量就不会分散到 DMZ 以进行内部传输。

如果这是不可能的,那么我们将不得不在内部飞地服务器上的客户端之间创建 MFT 传输,通过基于 DMZ 的 MFT 服务器,并输出/输入到外部客户群,并且在指定的飞地上有内部代理/服务器队列管理器,用于在内部交换文件。

4

1 回答 1

2

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
于 2012-09-26T22:13:08.470 回答