如何找到 horneq 队列长度

Posted

技术标签:

【中文标题】如何找到 horneq 队列长度【英文标题】:How to find a horneq Queue length 【发布时间】: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;


【问题讨论】:

【参考方案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)

【讨论】:

以上是关于如何找到 horneq 队列长度的主要内容,如果未能解决你的问题,请参考以下文章

如何利用python查看rabbitmq队列长度

如何找到for循环中数组的长度

怎么从queue队列中获取一定长度的数据

iis最大连接数和队列长度

当队列长度增加时如何扩展微服务(服务结构)实例

iis最大连接数和队列长度