监视具有旧消息的队列

时间:2011-07-15 18:29:26

标签: ibm-mq

我们有一个队列,需要对其长时间未处理的消息进行监控。 我们将QSVCINT(1800000)设置为30分钟。

仅当在大于指定限制的时间间隔内未检测到成功的get操作或MQPUT调用时,才会发生此事件。 (30分钟)

在我们的案例中,队列在30分钟的时间间隔内不断获取消息(MQPUT),因此不会触发服务间隔高。

我们有其他方法可以检查邮件的年龄并收到提醒吗?

1 个答案:

答案 0 :(得分:3)

在回答问题之前,让我们在前提中重置一个轻微的误解。队列服务时间间隔衡量PUT到空队列或未清空队列和下一个GET GET之间的时间。因此,您没有收到任何事件消息的原因不是由于PUT活动,而是缺少可能触发事件的GET活动。换句话说,一旦队列具有深度,在QSVCINTVL发生之前,您将不会获得任何GET个事件。此外,事件在OKHIGH之间切换,这样一旦获得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次调用

希望有所帮助。