当我想获得mq深度时,我使用getCurrentDepth
我注意到它对存储/缓存的mq队列对象不起作用。
我需要一个'新的'队列对象,我需要进行accessQueue
方法调用,获取队列并在该对象上使用getCurrentDepth
方法。否则,深度始终为零。
我没有找到任何有关此行为的开放式问题/文档。
我在linux上使用MQ客户端的java版本7.0。 我的开放选项是:MQC.MQOO_INPUT_AS_Q_DEF | MQC.MQOO_INQUIRE | MQC.MQOO_FAIL_IF_QUIESCING 我使用SSL连接。
谢谢!
答案 0 :(得分:1)
我注意到它不适用于存储/缓存的mq队列对象。
没有存储/缓存的MQ队列对象。队列类型包括:本地,远程,别名集群。
我需要一个新鲜的'队列对象
没有新鲜(刷新)队列对象的概念。
getCurrentDepth方法属于MQQueue类。因此,您需要使用MQQueueManager类的accessQueue方法访问队列。
最后,不应该在MQ应用程序中使用getCurrentDepth方法。您可以获得单个消息或循环,直到使用MQRC_NO_MSG_AVAILABLE(2033)原因代码抛出MQException。
答案 1 :(得分:0)
我认为您所说的是调用accessQueue然后在返回的MQQueue对象上调用getCurrentDepth并返回预期值。然后,在某个时刻,您在同一个MQQueue对象上调用getCurrentDepth(),它返回零(意外)。
我之前没有看到过这种行为,这不是预期的。如果MQQueue对象是'stale',那么你应该从getCurrentDepth方法中抛出一个MQException,并且我认为没有发生这种情况。
您是否已经验证了深度是您当前所期望的深度,例如,可能是另一个应用程序已删除了消息,或者事务已回滚过。