分布式环境中的MQ FTE

时间:2012-09-26 17:09:41

标签: websphere-mq-fte

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将外部合作伙伴的文件移动到飞地内部/外部,而不是不像我们使用队列将消息从重叠的集群或从集群内外的队列管理器移动到相邻集群的输入/输入。或者,允许在飞地内的MFT用户之间进行文件传输,以便流量不会在DMZ上进行内部传输。

如果无法做到这一点,那么我们必须在内部安全区服务器上的客户端之间,通过基于DMZ的MFT服务器以及外部客户群之外创建MFT传输,并且具有内部代理/服务器在指定的安全区队列管理器上,用于在内部交换文件。

1 个答案:

答案 0 :(得分: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上指向B的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并将XMitQ留在A上的QMgr别名上。或者设置两者。另一种选择是在B上创建一个名为QMGRC的QMgr别名,并将其通告给集群。

使用专用通道可以将文件传输流量从群集XMitQ中移出群集通道,从而提供与常规流量隔离的一类服务。文件传输流量都是非持久性的,并且每次只有一个帧文件将位于XMitQ上,因此您可能不需要这种级别的隔离。 (使用WMQ V7.5可以对重叠的群集和拆分群集XMitQ做同样的事情!)

您不需要FTE代理来测试它,只需使用SupportPac MA01中的Q程序,并在连接时指定本地QMgr和远程QMgr名称。

从电子邮件主题更新
好的,所以这里是我用来使用集群场景模拟它的定义。我定义了3个QMgrs,创建了一个集群,QMGRA作为存储库,QMGRB作为成员,QMGRB和C之间的网关使用SDR / RCVR通道。从A到达B的任何消息都发送到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