我在深度上定義瞭如下的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
對於觸發深度類型,觸發器監視器不會重新觸發觸發 - 它取決於應用程序。另外,我同意queue_offload.ksh腳本。 – Roger
IPPROCS和OPPROCS是0.這是一個測試隊列,所以沒有人使用它,除了使用qload實用程序(MO03)的測試queue_offload.ksh。設置TRIGGER和GET(禁用)後,腳本斷開連接。禁用GET,以便(在生產中)沒有其他人獲取這些消息並累積,直到下次觸發深度。 – BReddy