分布式环境中的WMQ全职员工



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是指定的Coordination QMGR,因此,如果在通过资源管理器连接时,我使用创建传输

QMGRA作为来源QMGRC作为目的地,我是否总是希望代理会遇到2087错误(这就是我得到的),目标远程队列未知?或者是否有一些"额外"的设置需要通过QMGRB的方式来熟悉QMGRA和QMGRC?

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

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

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。反之亦然。你需要一个指向B的C上的QMgr别名。

如果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个QMgr,创建了一个集群,QMGRA作为存储库,QMGRB作为成员,并使用SDR/RCVR通道在QMGRB和C之间建立网关。从A到C到达B的任何消息都解析为XMitQ。A知道C,因为名为QMGRC的QMgr别名指向QMGRC.XMITQ

在运行这些之后,我能够使用Q程序进行连接,而不需要指定RNAME的QREMOTE定义,并将消息从C发送到A,从A发送到C,发送到名为TEST.NAME.RESOLUTION的队列中,如下所示:

C:UsersT.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:UsersT.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

相关内容

  • 没有找到相关文章

最新更新