MQ Depth触发仅在第一次工作

时间:2015-06-03 15:21:24

标签: triggers ibm-mq depth

我在DEPTH上定义了一个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并禁用TEST.QUEUE上的GET。通过此设置,我首先使用上面的代码创建触发器设置,验证定义,然后使用100多条消息加载队列,MQ触发器并执行脚本,该脚本成功卸载队列并清除队列中的卸载消息,显示TEST.QUEUE零度的curdepth。在第一次运行之后,即使启动了触发器监视器,当我加载100多条消息时,MQ也不会触发,脚本也不会被执行。我尝试启用/禁用TEST.QUEUE GET,并在脚本结束时触发/ notrigger组合。没有组合有所作为。触发的所有其他条件似乎也得到满足。如果我再次运行上面的代码来定义触发器设置,它会再次工作并停止触发。

我错过了什么吗?可以尝试哪些其他设置?

提前致谢。

-BReddy

2 个答案:

答案 0 :(得分:0)

触发器监视器应该在处理时自动将队列设置为notrigger,然后在完成时返回触发器,我不认为你的queue_offload.ksh需要关闭触发器或者禁用队列。

" dis ql(' TEST.QUEUE')的输出是什么"和" dis qstatus(' TEST.QUEUE')类型(句柄)全部"在第二次尝试将100条消息放入队列后?它是否显示触发器的队列集并启用?它是否显示连接的进程的ipproc和opproc? queue_offload.ksh是否在处理前100条消息后断开连接并释放与队列的连接?

答案 1 :(得分:0)

在您的应用程序读取队列中的所有消息后,您是否可以重新启动' TEST.QUEUE'通过MQSET(或改变qlocal)?