我们有一个队列,需要对其长时间未处理的消息进行监控。
我们将QSVCINT(1800000)
设置为30分钟。
仅当在大于指定限制的时间间隔内未检测到成功的get操作或MQPUT
调用时,才会发生此事件。 (30分钟)
在我们的案例中,队列在30分钟的时间间隔内不断获取消息(MQPUT),因此不会触发服务间隔高。
我们有其他方法可以检查邮件的年龄并收到提醒吗?
答案 0 :(得分:3)
在回答问题之前,让我们在前提中重置一个轻微的误解。队列服务时间间隔衡量PUT
到空队列或未清空队列和下一个GET
的GET
之间的时间。因此,您没有收到任何事件消息的原因不是由于PUT活动,而是缺少可能触发事件的GET活动。换句话说,一旦队列具有深度,在QSVCINTVL
发生之前,您将不会获得任何GET
个事件。此外,事件在OK
和HIGH
之间切换,这样一旦获得HIGH
,您将无法获得另一个HIGH
,但最终会看到OK
。获得OK
事件后,由于迟到HIGH
而导致GET
条件发生,您将无法获得另一个事件。
假设一个程序在队列中放入10条消息,另一条程序读取第一条消息然后死掉。 PUT
调用不会生成事件,但会启动计时器。由于now-non-empty队列默认为OK
间隔状态,因此我们规定的第一个GET
上没有事件被激活。由于没有后续的GET
调用,计时器继续运行,但不会生成任何事件。新邮件可以继续到达,但事件只会在GET
来电时触发,该呼叫在成功GET
成功后30分钟或更长时间内发生。
如果您希望获得QSVCINTVL(HIGH)
活动基地不超过30分钟的GET
活动,则不会那样。
还在我身边吗?大!现在回答。
如果显示队列状态(例如使用DIS QS(QUEUE.NAME)
命令),则会提供最后GET
个时间和日期。 DIS QL(QUEUE.NAME) CURDEPTH
命令提供队列的深度。这两个命令可以在脚本中发布到runmqsc,也可以使用PCF命令直接发送到命令服务器,并允许您直接查询自队列上次成功GET
以来的时间,而不管任何GET
}活动,例如驱动事件所需的活动。
使用此方法,您可以首先验证队列是否具有深度(因为我们可能不关心空队列上是否有GET
个调用)然后如果是这样,请查看自从该队列以来已经过了多长时间最后GET
,即使消费程序已经死亡且没有GET
次调用。
希望有所帮助。