2015-07-21 65 views
2

我想設置一系列測試來測試QM的新安裝。他們中的大多數將處於「遠程」設置。我希望能夠向新QM發送消息並收到回覆。有沒有什麼辦法可以在正常的配置下進行「循環」(即不使用退出)?測試遠程WebSphereMQ隊列管理器

回答

4

我可以想到幾種方法來做到這一點。這取決於您是否要將MQPUT和MQGET包含在遠程系統目標隊列中。

  • 將目標隊列定義爲QREMOTE,再次將真實QLOCAL指向原始系統作爲原始系統上的最終目的地。
  • 使用諸如SupportPac MA01(Q程序)之類的東西在回到遠程系統上真正的QLOCAL隊列時回送消息。使用-e選項可讓您將消息反饋回ReplyToQ和ReplyToQMgr字段。
+0

具有Echo選項的MA01允許攻擊者向其發送帶有*任何* ReplyTo值的消息,並且假設它作爲MQ服務啓動並作爲'mqm'運行,則將其消息放置在任何隊列中。使用普通隊列和QRemotes的方法比較好,因爲消息可以嚴格包含在定義的路由中。我在我的回答中爲這種方法提供了示例對象定義,並提供了有關命名約定和安全性的一些想法,這些想法基於它在各個商店中的實現方式。 –

5

我的前僱主是一家銀行,我們有很多連接清理 房屋和其他供應商。在許多這些方面,我能夠讓業務合作伙伴在他們的最後設置回送隊列。這些由我的QMgr上的QRemote組成,指向另一側的QRemote,它指向我身邊原始QMgr上的QLocal。當一個消息是PUT到QRemote流到另一邊,在那裏登陸QRemote,然後被導回到QLocal。

如果郵件沒有恢復,我們會啓動我們的入站通道(在我們這邊定義爲RQSTR)。如果這導致通道啓動並且消息到達,那麼我們知道另一端的通道啓動器已關閉,但至少我們可以保持通道運行直到它被修復。但是,如果這不起作用,我們知道除了通道觸發之外,他們身邊還存在一些問題。

而且,是的,這是生產。我們認爲非事務性檢測消息在生產環境中是有效的。就我們而言,這與ping或羣集控制消息相同。當然,我們有一個網絡屏幕和其他儀器來啓動它,所以這個工具的使用被控制並被記錄下來。

也有類似的方法使用QMgr混疊,這可以大大減少大型網絡中所需的環回隊列的數量。不要試圖做到這一點!當我們使用指定完全限定目標的QRemotes時,他們所能做的就是在規定的隊列上發送和接收回送消息。但是,如果QRemote在沒有RQNAME的情況下使用,那麼它可以用於發送消息到任何在相鄰QMgr上的隊列。

比方說,你有QMAQMB

runmqsc QMA 
DEFINE QLOCAL(QMB.LOOPBACK) REPLACE 
DEFINE QREMOTE(QMB.LOOPBACK.RMT) + 
     XMITQ(QMB) + 
     RQMNAME(QMB) + 
     RNAME(QMB.QMA.LOOPBACK.RMT) + 
     REPLACE 
END 

runmqsc QMB 
DEFINE QREMOTE(QMB.QMA.LOOPBACK.RMT) + 
     XMITQ(QMA) + 
     RQMNAME(QMA) + 
     RNAME(QMB.LOOPBACK) + 
     REPLACE 

現在你可以去託管QMA服務器,並做到:

echo Hello World | amqsput QMB.LOOPBACK.RMT QMA 

注意環回反射器上QMB名下有它們都是 QMgr的名字。這是因爲您可能想要從雙方建立回合,並且不能使用QMB.LOOPBACK.RMT作爲反射器來啓動回送。在這種情況下,對象清單大致如下:

runmqsc QMA 
DEFINE QLOCAL(QMB.LOOPBACK) REPLACE 
DEFINE QREMOTE(QMB.LOOPBACK.RMT) + 
     XMITQ(QMB) + 
     RQMNAME(QMB) + 
     RNAME(QMB.QMA.LOOPBACK.RMT) + 
     REPLACE 

DEFINE QREMOTE(QMA.QMB.LOOPBACK.RMT) + 
     XMITQ(QMB) + 
     RQMNAME(QMB) + 
     RNAME(QMA.LOOPBACK) + 
     REPLACE 
END 

runmqsc QMB 
DEFINE QREMOTE(QMB.QMA.LOOPBACK.RMT) + 
     XMITQ(QMA) + 
     RQMNAME(QMA) + 
     RNAME(QMB.LOOPBACK) + 
     REPLACE 

DEFINE QLOCAL(QMA.LOOPBACK) REPLACE 
DEFINE QREMOTE(QMA.LOOPBACK.RMT) + 
     XMITQ(QMA) + 
     RQMNAME(QMA) + 
     RNAME(QMA.QMB.LOOPBACK.RMT) + 
     REPLACE 
END 

注意,所有的對象理清基於遠程QMGR的名稱。有些人更喜歡像LOOPBACK.QMB.RMT這樣的名稱,以使所有環回隊列在對象列表或備份中聚集在一起。

所有這些都是自動化的偉大目標,因爲對象的名稱都可以從QMgrs的名稱派生而來。