【问题标题】:How to find a horneq Queue length如何找到 horneq 队列长度
【发布时间】:2011-06-20 02:53:44
【问题描述】:

我正在使用 Hornetq 2.0,我不明白我如何知道目前队列中有多少消息。

这是一个非常有用的功能,因此我可以在运行时知道我的消费者是否足够快地消费消息。

我使用的不是 JMS api,而是高度优化的核心 API。

获取队列中消息数量的正确(最快)方法是什么?

我找到了两种方法,但不知道什么是正确的方法。

public int size(){

    ClientSession session;

    try {

        session = sf.createSession(false, false, false);

        ClientRequestor requestor = new ClientRequestor(session, "hornetq.management");

        ClientMessage m = session.createMessage(false);

        ManagementHelper.putAttribute(m, "core.queue." + queueName, "messageCount");

        ClientMessage reply = requestor.request(m);

        int count = (Integer) ManagementHelper.getResult(reply);

        return count;

    } catch (Exception e) {

        e.printStackTrace();

    }

    return 0;

}

public synchronized int size(){

    ClientSession coreSession = null;

    int count = 0;

    try {

        coreSession = sf.createSession(false, false, false);

        ClientSession.QueueQuery result;

        result = coreSession.queueQuery(new SimpleString(queueName));

        count = result.getMessageCount();

    } catch (HornetQException e) {

        e.printStackTrace();

    } finally {

        if (coreSession!= null ){

            try {

                coreSession.close();

            } catch (HornetQException e) {

                e.printStackTrace();

            }

        }

    }

    return count;

}

【问题讨论】:

    标签: java jms message-queue hornetq


    【解决方案1】:

    我找到了这两种方法

    public synchronized int size(){
        ClientSession session;
        try {
            session = sf.createSession(false, false, false);
            ClientRequestor requestor = new ClientRequestor(session, "hornetq.management");
            ClientMessage m = session.createMessage(false);
            ManagementHelper.putAttribute(m, "core.queue." + queueName, "messageCount");
            ClientMessage reply = requestor.request(m);
            int count = (Integer) ManagementHelper.getResult(reply);
            return count;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }
    

    public synchronized int size(){
        ClientSession coreSession = null;
        int count = 0;
        try {
            coreSession = sf.createSession(false, false, false);
            ClientSession.QueueQuery result;
            result = coreSession.queueQuery(new SimpleString(queueName));
            count = result.getMessageCount();
        } catch (HornetQException e) {
            e.printStackTrace();
        } finally {
            if (coreSession!= null ){
                try {
                    coreSession.close();
                } catch (HornetQException e) {
                    e.printStackTrace();
                }
            }
        }
        return count;
    }
    

    【讨论】:

      【解决方案2】:

      您必须使用管理界面,本文档末尾是检索消息计数的示例:http://hornetq.sourceforge.net/docs/hornetq-2.0.0.GA/user-manual/en/html/management.html#management.message-counters

      【讨论】:

        【解决方案3】:

        hornetq-2.2.14.Final 附带了一个关于消息计数器的示例。它位于 hornetq-2.2.14.Final/examples/jms/message-counters

        【讨论】:

          【解决方案4】:

          断章取义但很有用, 如果您使用的是 jboss,那么您可以使用下面的 cli 命令来获取队列消息计数。 /subsystem=messaging/hornetq-server=default/jms-queue=:read-attribute(name=message-count)

          【讨论】:

            猜你喜欢
            • 2018-07-18
            • 1970-01-01
            • 2017-10-18
            • 1970-01-01
            • 1970-01-01
            • 2015-09-30
            • 2010-10-02
            • 1970-01-01
            • 2012-07-03
            相关资源
            最近更新 更多