【问题标题】:WMQ FTE in a Distributed Environment分布式环境中的 WMQ FTE
【发布时间】:2012-09-28 03:10:31
【问题描述】:

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 上进行内部传输。

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

【问题讨论】:

    标签: websphere-mq-fte


    【解决方案1】:

    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
    

    【讨论】:

    • 但是,如果 A 和 B 在 MQ 集群中,我猜 xmitq QMGR2 不需要在 QMGRA 上定义对吗?我不想使用从 A 到 B 的 xmitq 和触发发送方通道...
    • 是的,您可以使用集群解析。在这种情况下,您可能可以不设置 RQMNAME 并将 XMitQ 留空。或者两者都设置。使用专用通道使文件 XFer 流量远离集群 XMitQ 和集群通道,因此提供了与常规流量隔离的一类服务。不过,文件 XFer 流量都是非持久性的,每次在 XMitQ 上最多只能有一个帧/文件,因此您可能不需要那种级别的隔离。 (使用 WMQ V7.5 可以对重叠集群和拆分集群 XMitQ 做同样的事情!)
    • 实际上,这是一个 FTE 特定的队列管理器设置,以使其与我们的常规 MQ 流量完全隔离,尽管 Len McWilliams 向我保证 FTE 旨在运行非侵入性较低优先级。另外:qmgrc 不需要类似的远程定义返回到 QMGRA 吗?
    • 公平地说,我确实说过“反向将适用于获取消息”,但我已经更新了答案以澄清。为了那些不阅读 cmets 的人的利益,还将集群信息移动到答案中。
    • 你确实做到了。为了让它发挥作用,我非常兴奋地跳过了它。但是,我必须请求将该定义应用于远程端的 queumgr。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2018-10-29
    • 2018-12-05
    • 2016-06-04
    • 2012-08-04
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多