I am using Hornetq 2.0, I do not understand how I can find out how many messages in the queue are in the queue.
This is a very useful feature, so I can know at runtime if my consumer consumes the message fast enough.
I do not use the JMS api, but a very optimized base API.
What is the correct (fastest) way to get the number of messages in a queue?
I found 2 ways, but donβt know how to do it right.
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; }
or
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
skyde
source share