2012-03-19 121 views
1

与往常一样,IBM文档很适合它告诉你的内容,但留下了重要的细节。道歉,如果这已经在这里回答 - 搜索条款不幸的是大多是通用的或至少含糊不清,我已经通过几百个问题看了,没有运气。如何连接WebSphere MQ 7.0的队列管理器分布式发布/订阅

我有两台IBM i服务器,每台服务器都有一个WMQ 7.0队列管理器。我有两个通道在它们之间运行 - 每个方向一个。

我在“服务器A”上定义了一个主题,其中包含“全部”的发布和订阅范围以及“强制”的代理订阅行为。

我在范围“全部”的“服务器B”上定义了一个订阅。

一切都运行起来,但是当我删除消息进入正题上服务器A(使用MQ资源管理器),没有出现在服务器B上

我看了一下,使这个要求的“代理订阅”工作,但我不能为我的生活找出如何创造这些。

任何协助赞赏。我已经有了这么多(从来没有用过pub/sub)几个小时之内只能在这个障碍之旅。

您必须设置出版物这两个队列管理器之间的层级流向排队上B.

你不得不安装经理出版物这两个队列管理器之间的层级流向上排队经理B.

假设A上的队列管理器作为父节点上的队列管理器,B上的队列管理器作为子节点,则必须在B上的队列管理器的RUNMQSC提示符中发出“ALTER QMGR PARENT()”。这将在两个队列管理器之间创建层次结构。一旦在B上的队列管理器上创建了订阅,代理订阅将自动流向A上的队列管理器。假设A上的队列管理器作为父节点,并且B上的队列管理器作为子节点,您必须在其中发布“ALTER QMGR PARENT()” B上的队列管理器的RUNMQSC提示。这将在两个队列管理器之间创建层次结构。一旦订阅对B的队列中管理器创建,代理订阅将自动流向上排队A.经理

编辑:在我的配置更多细节(略有更有意义 - 我 - 服务器名称)

在服务器A7:

Queue manager A7.QUEUE.MANAGER 
Sender channel A7.TO.A2 with transmission queue A7.TO.A2 
Alias queue A2.QUEUE.MANAGER pointing to A7.TO.A2 
Receiver channel A2.TO.A7 

在服务器A2:

Queue manager A2.QUEUE.MANAGER 
Sender channel A2.TO.A7 with transmission queue A2.TO.A7 
Alias queue A7.QUEUE.MANAGER pointing to A2.TO.A7 
Receiver channel A7.TO.A2 
I then issued ALTER QMGR PARENT('A7.QUEUE.MANAGER') 

我对A7并发出ALTER(上图)后的话题,我添加订阅关于A2的话题。

display pubsub type(ALL)        
3 : display pubsub type(ALL)      
AMQ8723: Display pub/sub status details.    
QMNAME(A2.QUEUE.MANAGER) TYPE(LOCAL) 

display pubsub type(ALL)        
1 : display pubsub type(ALL)      
AMQ8723: Display pub/sub status details.    
QMNAME(A7.QUEUE.MANAGER) TYPE(LOCAL) 

回答

3

集群两个QMgrs和宣传的主题,以集群。然后,WMQ将在整个群集中提供出版物。

在QMGR01

# Make the QMgr a cluster repository 
ALTER QMGR REPOS('CLUSTERNAME') 

# Create CLUSRCVR and advertise to cluster 
# Substitute your CONNAME parms, QMgr name, channel names, etc. 
DEF CHL(CLUSTERNAME.QMGR01) CHLTYPE(CLUSRCVR) + 
    TRPTYPE(TCP) + 
    CONNAME('127.0.0.1(1414)') + 
    CLUSTER('CLUSTERNAME') + 
    REPLACE 

# Create topic object and advertise to cluster 
DEF TOPIC('ROOT') TOPICSTR('ROOT') CLUSTER('CLUSTERNAME') REPLACE 

在QMGR02

# Always create CLUSRCVR first and advertise to cluster 
# Substitute your CONNAME parms, QMgr name, channel names, etc. 
DEF CHL(CLUSTERNAME.QMGR02) CHLTYPE(CLUSRCVR) + 
    TRPTYPE(TCP) + 
    CONNAME('127.0.0.1(1415)') + 
    CLUSTER('CLUSTERNAME') + 
    REPLACE 

# Then conecct to the repos and advertise the CLUSSDR to the cluster too 
# Substitute your CONNAME parms, QMgr name, channel names, etc. 
DEF CHL(CLUSTERNAME.QMGR01) CHLTYPE(CLUSSDR) + 
    TRPTYPE(TCP) + 
    CONNAME('127.0.0.1(1414)') + 
    CLUSTER('CLUSTERNAME') + 
    REPLACE 

现在,你可以发布到被宣传到群集的话题:

在QMgr01

amqspub ROOT/Whatever QMGR01 

在QMgr02

amqssub ROOT/Whatever QMGR02 

你不必命名您的对象ROOT或用其作为主题命名空间的顶部。这是一个任意的例子,你可以使用任何你想要的。在Production中,您可能会在主题层次结构中的第二或第三级别有一些主题对象挂起访问控制列表。通常,这些对象用于向群集通告主题。

一些其他注意事项:

  • 不能做广告SYSTEM.BASE.TOPICSYSTEM.DEFAULT.TOPIC到集群。
  • 集群主题只需要在集群中的一个节点上定义。它可以是任何节点,但在主要完整存储库上宣传它是一种很好的做法。这样你就知道所有的聚集主题对象是在哪里定义的,而且知识库是(或者应该是)高度可用的。
  • 如果存在重叠的本地和聚集主题对象,则本地优先。

请参阅Creating a new cluster topic获取更多信息。此外,Creating and configuring a queue manager cluster有创建群集并添加QMgrs的任务。不过,我在Windows主机上测试了上述内容,并且在这个最小集群中,pub/sub工作得很好。

+0

谢谢。我希望现在不要走集群路线,但如果我这样做,我肯定会提到你的优秀信息。 – zkarj 2012-03-19 20:37:48

2

您必须设置出版物这两个队列管理器之间的层级流动到队列管理器B.

上的一个假设队列管理器为家长和队列管理器上B中的孩子,你必须发出“ALTER QMGR PARENT()“,在B队列管理器的RUNMQSC提示符中。这将在两个队列管理器之间创建层次结构。一旦在B上的队列管理器上创建了订阅,代理订阅将自动流向队列管理器A.

+0

谢谢。这应该足以让我提出的方案有效(其中有一个明确定义的发布系统,其余的将是订阅者)。但从一般意义上讲,这是否意味着订阅也会以另一种方式流动呢?我们有多个开发/测试框,让每个盒子订阅对方的出版物可能是有用的。 – zkarj 2012-03-19 20:39:27

+0

还是有些不对。 我已经做了更多的阅读与这个层次的头脑。我意识到我需要使用外部队列管理器的名称添加一个别名队列,以便本地队列管理器可以找到它,但我仍然看不到订阅传播(我期望将其视为父级上的订阅条目?)并且测试发布消息也没有通过。 – zkarj 2012-03-19 22:50:54

+0

注意待定编辑迁移到 – trashgod 2012-03-20 00:13:27