如何计算ACTIVEMQ中的队列数

时间:2015-02-05 05:52:39

标签: java activemq jmx

我正在尝试创建一个应用程序,它继续检查在activemq中启动和运行的队列数。 以及检查队列是否正常工作的任何方式,即是否已损坏且无法处理消息。 请建议如何做。

先谢谢。

3 个答案:

答案 0 :(得分:1)

您可以尝试以下代码。

public static void main(String[] args) throws Exception
    {
        // get the initial context
        InitialContext ctx = new InitialContext();

        // lookup the queue object
        Queue queue = (Queue) ctx.lookup("queue/queue0");

        // lookup the queue connection factory
        QueueConnectionFactory connFactory = (QueueConnectionFactory) ctx.
            lookup("queue/connectionFactory");

        // create a queue connection
        QueueConnection queueConn = connFactory.createQueueConnection();

        // create a queue session
        QueueSession queueSession = queueConn.createQueueSession(false,
            Session.AUTO_ACKNOWLEDGE);

        // create a queue browser
        QueueBrowser queueBrowser = queueSession.createBrowser(queue);

        // start the connection
        queueConn.start();

        // browse the messages
        Enumeration e = queueBrowser.getEnumeration();
        int numMsgs = 0;

        // count number of messages
        while (e.hasMoreElements()) {
            Message message = (Message) e.nextElement();
            numMsgs++;
        }

        System.out.println(queue + " has " + numMsgs + " messages");

        // close the queue connection
        queueConn.close();
    }

答案 1 :(得分:1)

您可以使用代理上的statistics plugin和普通的JMS API来询问统计信息。即要计算FOO.BAR上的消息数,请向ActiveMQ.Statistics.Destination.TEST.FOO发送一条空消息并指定replyTo标头。在响应消息(典型的MapMessage)中,您可以找到消息计数器。

另一种方法是使用简单的队列浏览器浏览队列的第一条消息(类似于praveen_programmer建议的方式)并检查该消息的时间戳。如果它超过某个阈值,您可能会遇到该消费者的问题。即在最后一小时/分钟/天内没有处理任何消息。

另一种方法是使用JMX,或者最好使用jolokia REST/HTTP management api

只需使用http查询目标,您就可以获得队列深度: 要在localhost上查询队列“q”,请使用以下api(您需要提供Web控制台的用户/密码): http://localhost:8161/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=localhost,destinationType=Queue,destinationName=q

答案 2 :(得分:0)

查看咨询消息。您需要在配置中启用它们,但通过简单的JMS消息传递,您可以获得有关当前activemq实例信息的大量有用信息。 http://activemq.apache.org/advisory-message.html我正在使用它们来强调缓慢的生产者和消费者情景。