2009-11-19 94 views
1

我們目前正在構建一個需要與某些IBM WebSphere隊列進行通信的應用程序。在隊列的另一頭還有另一個世界。由於一些未知的情況(對我而言),連接到MQQueueManager每次需要17秒,但通過隊列發送和接收消息並不是一件耗時的工作。因爲我們現在將一個Web服務放在WebSphere前面,所以我們提出了裝飾和緩存MQQueueManagers和MQQueues的想法,並在每個消息發送之前驗證它們是否已連接並分別打開;如果沒有,我們嘗試連接到MQQueueManager,分別打開MQQueue(再次,連接到MQQueueManager需要17秒,打開MQQueue是「即時」)。所以我們期待WebSphere每一次都會斷開與MQQueueManager的連接(我無法確定,因爲我們現在不能進行嚴格的測試,但我們應該謹慎),而不幸的調用程序會等待17秒才能重新連接。就目前而言,我們無法預測這種事情的發生。 我們當前的實現使用.NET的WebSphere MQ類。當MQQueueManager斷開連接或關閉相關隊列時,是否有可能收到回調通知?如何在IBM Queue Manager斷開連接時接收通知?

回答

1

是的!如果您使用最新的WMQ .Net類和最新的IA9H SupportPac,您將獲得異步回調方法。 (這裏附帶.Net示例代碼,演示如何註冊和使用回調函數)。我的理解是,如果連接是可用的,則此方法會在您的回調例程有消息時傳遞消息,或者向註冊的異常偵聽器傳遞例外丟失或隊列設置爲GET(DISABLED)

獲取最新的WMQ客戶端here。使用名稱MQC *查找SupportPacs。 v8.0客戶端是MQC8,v9客戶端是MQC9等。

如果您有舊版本的.Net WMQ類,並且由於某種原因無法升級,您可以始終保持單獨的線程打開並定期輪詢隊列。不過,不要頻繁輪詢。在過去,我看到人們使用類變量作爲倒數計時器。每次成功檢索消息或將其放入隊列時,定時器都會重置爲最大值。當計時器達到零時,輪詢隊列。這樣,只有在連接上沒有其他流量時才輪詢隊列。

+0

非常感謝!那就是我一直在尋找的東西! – DaeMoohn 2009-11-20 07:32:06

+0

它說沒有找到文件。這不是免費的,還是我應該使用公司憑據? – DaeMoohn 2009-11-20 07:59:40

+0

有人可以提供一個代碼樣本嗎?我沒有找到.NET類的任何東西。 – DaeMoohn 2009-11-20 08:46:25

相關問題