Java 如何找到horneq队列长度
我使用的是Hornetq 2.0,我不明白我怎么知道现在队列中有多少条消息 这是一个非常有用的特性,所以我可以在运行时知道我的消费者是否足够快地消费消息 我使用的不是JMS api,而是高度优化的核心api 获取队列中消息数量的正确(最快)方法是什么 我找到了两种方法,但不知道什么是正确的方法Java 如何找到horneq队列长度,java,jms,message-queue,hornetq,Java,Jms,Message Queue,Hornetq,我使用的是Hornetq 2.0,我不明白我怎么知道现在队列中有多少条消息 这是一个非常有用的特性,所以我可以在运行时知道我的消费者是否足够快地消费消息 我使用的不是JMS api,而是高度优化的核心api 获取队列中消息数量的正确(最快)方法是什么 我找到了两种方法,但不知道什么是正确的方法 public int size(){ ClientSession session; try { session = sf.createSession(false, f
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 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;
}
及
hornetq-2.2.14.最终发布,并提供消息计数器示例。它位于hornetq-2.2.14。Final/examples/jms/message counters脱离上下文,但很有用, 如果您使用的是jboss,那么可以使用下面的cli命令获取队列消息计数。 /子系统=消息传递/hornetq服务器=默认/jms队列=:读取属性(名称=消息计数)
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;
}