2011-03-31 89 views
1

我們使用IBM WebSphere MQ作爲SWIFT消息。收到SWIFT消息後,會在處理過程中處理並放入本地隊列。它像如下:MQ消息被延遲幾天

外面世界> Q1>應用程序> Q2>應用程序> Q3>應用

的隊列是本地隊列。但是,如果消息從Q1/Q2/Q3到達應用程序,就會有相當長的延遲......就像幾天一樣。這是任意發生的。我們不知道爲什麼會發生這種情況。大部分消息都很快得到,但在3-4天內有一​​些消息遲到。

所有這些都發生在一個事務中,我們使用Atomikos作爲事務管理器。

以前有人遇到過類似的問題嗎?任何幫助表示讚賞。

謝謝, Midhun。

回答

1

有許多方式可以延遲WebSphere MQ消息,並且診斷可能需要一些檢測工作。以下是一些常見原因:

  1. 消息卡在同步點之下。雖然幾天來一次消息處於同步點不太常見,但我已經看到它發生了。問題在於某些應用程序被設計爲在單個事務中批量處理多條消息,並且當消息沒有以批次爲單位到達時,剩餘的消息將等待另一條消息到達並關閉批處理。
  2. 消息卡在同步點。在另一種情況下,程序邏輯在讀取下一條消息之前不會提交同步點。當多個線程正在處理消息時,負載的分配在所有線程中不一定是均勻的,並且如果負載較輕,則可以使消息分配不足。
  3. 通過瀏覽孤立的消息。在這種情況下,消息以比當前瀏覽光標更高的優先級到達。如果重新掃描間隔設置得非常高且流量也很高,則瀏覽光標重置爲隊列頂部可能需要一段時間。
  4. 程序錯誤。你沒有提及你正在使用的WMQ客戶端和服務器的版本(希望這兩個版本都是7.0),但偶爾會有問題導致線程掛起。這些可以在同步點下綁定一條消息。查看latest FixPack for your version並檢查名爲「在...中修復的問題」的鏈接以查看APAR是否解決您的特定問題始終是個好主意。如果是這樣,請應用最新的修訂包。

要啓動診斷此,使用DIS QSTATUS命令來顯示輸入的數目和輸出處理隊列,該消息年齡和工作中的任優秀單位。您也可以使用SupportPac MA0W中的出口來獲取給定隊列上所有API調用的人類可讀蹤跡。這可能是一個非常有價值的診斷工具,因爲您可以確切地知道消息在同步點之下有多長時間,它是否正在持續退出並重新讀取,API調用使用了哪些選項等。您甚至可以限制跟蹤到特定的隊列或特定的線程,如果您需要讓它運行一段時間,這些線程會很有幫助。