2015-06-03 63 views
0

我在深度上定義瞭如下的MQ觸發器。它在創建後第一次觸發,但不會再次觸發。定義如下。MQ深度觸發僅在第一次工作

DEFINE PROCESS(DEVL.OFFLOAD.PROCESS) APPLTYPE(UNIX) + 
    APPLICID('/home/mqm/bin/queue_offload.ksh') + 
    DESCR('Queue Offload Program Triggered on Depth')+ 
    replace 

DEFINE QL('TEST.QUEUE') INITQ(SYSTEM.DEFAULT.INITIATION.QUEUE) + 
    TRIGGER PROCESS(DEVL.OFFLOAD.PROCESS) + 
    TRIGTYPE(DEPTH) TRIGDPTH(100) + 
    replace 

DEFINE SERVICE(SYSTEM.TRIGGER.MONITOR.SERVICE) + 
    CONTROL(QMGR) SERVTYPE(SERVER) + 
    STARTCMD('/usr/bin/runmqtrm') + 
    STARTARG('-m +QMNAME+ -q SYSTEM.DEFAULT.INITIATION.QUEUE') + 
    STOPCMD('/usr/mqm/bin/amqsstop') + 
    STOPARG('-m +QMNAME+ -p +MQ_SERVER_PID+') + 
    STDOUT('/home/mqm/temp/+QMNAME+_trm.out') + 
    STDERR('/home/mqm/temp/+QMNAME+_trm.err') + 
    DESCR('Trigger Monitor Service for Queue Offload') + 
    replace 

DISPLAY SERVICE(SYSTEM.TRIGGER.MONITOR.SERVICE) 

START SERVICE(SYSTEM.TRIGGER.MONITOR.SERVICE) 

DISPLAY SVSTATUS(SYSTEM.TRIGGER.MONITOR.SERVICE) 

的queue_offload.ksh腳本禁用觸發,使GET,卸載從隊列中的消息到一個文件,並在最後將TRIGGER並禁用GET上TEST.QUEUE。通過這種設置,我首先使用上面的代碼創建觸發器設置,驗證定義,然後使用100條消息,MQ觸發器加載隊列並執行腳本,該腳本成功卸載隊列並清除隊列中卸載的消息,並顯示TEST.QUEUE零的彎曲。在第一次之後,即使觸發器監視器正在運行,當我加載100多個消息時,MQ也不會觸發並且腳本不會執行。我嘗試了TEST.QUEUE GET啓用/禁用,並在腳本末尾觸發/ notrigger組合。沒有組合有所作爲。觸發的所有其他條件似乎也得到滿足。如果我再次運行上面的代碼來定義觸發器設置,它會再運行一次並停止觸發。

我錯過了什麼嗎?還有哪些設置可以嘗試?

在此先感謝。

-BReddy

回答

0

觸發器監控應自動設置隊列NOTRIGGER而它正在處理,然後返回到觸發完成時,我不認爲你需要queue_offload.ksh關閉觸發或禁用獲取隊列。

在第二次嘗試將100條消息放入隊列後,「dis ql('TEST.QUEUE')all」和「dis qstatus('TEST.QUEUE')類型(句柄)全部」的輸出是什麼?它是否顯示爲觸發器設置的隊列並啓用?它是否顯示連接的進程的ipprocs和opprocs? queue_offload.ksh在處理前100條消息後是否斷開並釋放其與隊列的連接?

+1

對於觸發深度類型,觸發器監視器不會重新觸發觸發 - 它取決於應用程序。另外,我同意queue_offload.ksh腳本。 – Roger

+0

IPPROCS和OPPROCS是0.這是一個測試隊列,所以沒有人使用它,除了使用qload實用程序(MO03)的測試queue_offload.ksh。設置TRIGGER和GET(禁用)後,腳本斷開連接。禁用GET,以便(在生產中)沒有其他人獲取這些消息並累積,直到下次觸發深度。 – BReddy

0

在應用程序讀取隊列中的所有消息後,是否可以通過MQSET(或更改qlocal)觸發'TEST.QUEUE'?

+0

是的。它使用alter qlocal設置TRIGGER和GET(禁用)。 – BReddy

+0

當你最初定義隊列時,它不會被獲取(禁用),它會起作用,對吧?這可能是你的問題。觸發器監視器輸出日誌中有什麼?也許它是觸發的,但由於禁用了它而無法獲取消息。 – ValerieLampkin

+0

正如我在第一篇文章中指定的那樣,queue_offload.ksh首先啓用隊列,然後卸載。 – BReddy

相關問題