3

我试图在不使用任何 API(如 Hermes 或 GEMS)的情况下监控队列,即我想使用纯 JAVA。所以为了浏览队列,即检查消息是否已到达队列,而不实际使用我在下面的代码中编写的消息:

javax.jms.QueueBrowser browser = session.createBrowser(queue);

        Enumeration msgs = browser.getEnumeration();

        int Count=0;

        while(msgs.hasMoreElements())
        {
            message = (javax.jms.Message)msgs.nextElement();
            System.out.println("Message"+message);
            Count++;
        }

但是,当我在队列上发布消息时,它不会显示结果。我已经验证消息正在到达队列并且接收者正在使用相同的消息。因此,由于这种方法不起作用,我想使用一种不同的方法,即计算队列前后收到的 numberOfMessages 数。所以我使用了下面的代码

QueueInfo q= new QueueInfo(queueName);
    long l=q.getInTransitMessageCount();
    System.out.println("In transit Mesasge Count="+l+"\n");

但这也行不通。任何解决此问题的建议或解释将不胜感激。请注意,代码中没有编译错误,并且所有必要的类都已导入。

4

3 回答 3

1

您使用的代码将在某个时刻计算队列中的消息数。在此时间片之外发布然后使用的消息将不会显示,并且在大多数 JMS 实现中消息的使用速度非常快。

当我们监控一个活动的消息队列时,我们只关心队列中是否有消息,因为这意味着消费者已经停止或消费不够快。

如果您试图计算过去的消息,那么您将需要拦截这些消息(即自己使用它们并将它们发布到另一个队列)。

您可能想提供更多关于您真正想要的信息。

于 2012-01-08T23:57:31.417 回答
0

QueueBrowser 不需要给你快照。如果队列中有其他消费者,那么他们将耗尽它,因此他们有可能被拉走。请先尝试关闭您的消费者,看看会发生什么。见[1]

[1] http://docs.oracle.com/javaee/1.3/api/javax/jms/QueueBrowser.html

于 2012-01-06T10:52:09.503 回答
0

您的浏览器代码似乎是正确的..检查您是否传递了正确的队列参数..或者只是调试并查看为什么不执行该循环?

于 2012-01-05T17:39:57.857 回答