We have a part in my code that queries a queue once in an hour to get it's size.
this is the code e used
MBeanServer mBeanServer = MBeanServerLocator.locateJBoss(); ObjectName serverObjectName = new ObjectName("jboss.messaging.destination:service=Queue,name=" + queueName); Integer messagesInQueue = (Integer) mBeanServer.getAttribute(serverObjectName, "MessageCount"); return messagesInQueue.intValue() ;
and we keep the data in the DB.
from looking into the data kept we see that sometimes we receive negative values.
in https://jira.jboss.org/browse/JBMESSAGING-926?focusedCommentId=12356514&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel We saw a discussion about this issue but it describes a scenario of calling removeAllMessage. In our case we don't interfere with the queues work messages are sent by the producer and handled by the receivers.
we are using Messaging 1.4.5.GA
I have 2 questions:
Yes it's possible to be negative.
The reason for this is that the message delivering and acknowledging are synchronous. A messages is being delivered to a consumer in a thread and the counter is updated in another. The ack of message is obviously also asynchronous wrt delivering. So their is a chance that a message ack comes bebore the counter is added.