我们有一个队列,需要对消息进行长时间未处理的监控。 我们设置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事件。我现在没有时间对其进行测试,但这是我从文档中获得的结果。 –