我們有一個隊列,需要對消息進行長時間未處理的監控。 我們設置QSVCINT(1800000)
即30分鐘。具有舊消息的監控隊列
僅當沒有成功的獲取操作時纔會發生此事件,或者在大於指定限制的時間間隔內檢測到MQPUT
調用。 (30分鐘)
在我們的情況下,隊列在30分鐘的時間間隔內不斷獲取消息(MQPUT),所以不會觸發服務間隔高。
我們有其他方法可以檢查郵件的年齡並獲得警報嗎?
我們有一個隊列,需要對消息進行長時間未處理的監控。 我們設置QSVCINT(1800000)
即30分鐘。具有舊消息的監控隊列
僅當沒有成功的獲取操作時纔會發生此事件,或者在大於指定限制的時間間隔內檢測到MQPUT
調用。 (30分鐘)
在我們的情況下,隊列在30分鐘的時間間隔內不斷獲取消息(MQPUT),所以不會觸發服務間隔高。
我們有其他方法可以檢查郵件的年齡並獲得警報嗎?
在回答這個問題之前,讓我們在前提中重置一個輕微的誤解。隊列服務間隔測量PUT
到空隊列之間的時間或GET
(不會清空隊列和下一個GET
)之間的時間。因此,您沒有收到任何事件消息的原因不是PUT活動,而是由於缺少可觸發事件的GET活動導致的。換句話說,一旦隊列具有深度,您將不會得到任何QSVCINTVL
事件,直到發生GET
。此外,這些事件在OK
和HIGH
之間切換,因此一旦得到HIGH
,您將不會得到另一個HIGH
,但最終應該看到一個OK
。一旦得到OK
事件,您將不會得到另一個,直到HIGH
條件發生,因爲GET
已晚。
想象一下,一個程序在隊列中放置10條消息,另一條消息讀取第一條消息,然後死亡。 PUT
調用不會生成事件,但會啓動計時器。由於現在非空隊列的默認間隔狀態爲OK
,因此我們規定的第一個GET
上沒有事件發生。由於沒有後續的GET
調用,計時器將繼續運行,但不會生成任何事件。新消息可以繼續到達,但此事件只會在GET
成功發生後30分鐘或更長時間的GET
呼叫中觸發。
如果您希望獲得一個QSVCINTVL(HIGH)
事件庫不會有GET
活動超過30分鐘,它不會這樣工作。
還在我身邊嗎?大!現在回答答案。
如果顯示隊列狀態(例如使用DIS QS(QUEUE.NAME)
命令),它將提供最後的GET
時間和日期。 DIS QL(QUEUE.NAME) CURDEPTH
命令提供隊列的深度。這兩個命令可以發送到腳本中的runmqsc或使用PCF命令直接發送到命令服務器,並允許您直接查詢自隊列上最後一次成功GET
以來的時間,而不考慮驅動器所需的任何GET
活動事件。
使用這種方法,你可以先驗證該隊列具有深度(因爲那時我們不關心,如果有一個空的隊列中沒有GET
電話),然後如果是這樣,看看它是如何長久以來自上次GET
即使消費程序已經死亡,並且沒有GET
呼叫正在撥打。
希望有所幫助。
Thanks rob ..當隊列屬性QSVCIEV進入無狀態QSVCIEV(NONE)?它是屬性QSVCIEV的默認值嗎? – Vignesh
是的!該屬性控制是否會生成事件。如果設置爲NONE,則不會生成事件消息。此外,基於此頁面http://publib.boulder.ibm.com/infocenter/wmqv7/v7r0/topic/com.ibm.mq.csqzax.doc/mo10860_.htm我相信你*可以*得到一個HIGH事件沒有GET。似乎表示可以爲PUT或GET生成一個事件。由於OK事件需要GET,因此我認爲在QSVCINTVL之後發生的PUT足以產生HIGH事件。我現在沒有時間對其進行測試,但這是我從文檔中獲得的結果。 –