We've got a really weird problem. Some times we still have messages on a queue, but they are not being consumed by the active consumers.
Via JMX the QueueSize is 1 doesCursorHaveMessagesBuffered return false cursorSize returns 0 doesCursorHaveSpace returns true I can browse the message Restarting consumers has no effect. Restarting ActiveMQ, or simply performing a gc on the broker via JMX will correct it. Sending a message to the queue will push the current pending message to a consumer, but the new message is then stuck. I've created and analyzed a memory dump. The batchList (OrderedPendingList) of the QueueStorePrefetch contains a map with size 1, so doesCursorHaveMessagesBuffered should have returned true rather than false. We have been unable to create a reproduction case yet, it just happens at some point at stays like that until a restart or explicit gc on the broker. The queue has 20 consumers (prefetch=1), and a lot of messages do need to be redelivered. This is with ActiveMQ 5.4.2 running on java 1.6.0_36 (rhel-1.13.8.1.el5_11-x86_64). Yes, I know it's rather old (we don't have the luxury yet to upgrade). Looking at the code of a newer ActiveMQ I do not see differences in the path from doesCursorHaveMessagesBuffered to OrderedPendingList.isEmpty Has anybody seen anything like this before? I did see a message from Donnell Alwyn on 04 Nov 2014 which looks quite similar to this problem, but for AMQ 5.9. But there was no answer to his question. -- "If you dig a hole and it’s in the wrong place digging it deeper is not going to help." – Seymour Chwast Michiel Hendriks, MSc MP Objects - Supply Chain Systems ✉️ michiel.hendr...@mp-objects.com 🏠 www.mp-objects.com ☎ +31 102900304