2012-03-19 123 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

相關問題