如何找到 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 队列长度的主要内容,如果未能解决你的问题,请参考以下文章