I am using ActiveMQ 5.7. As part of the application in question, I require the use of both message expiration and broker redelivery. The two features work as expected in isolation.
Without redelivery enabled, messages with a non-zero TTL are removed from the queue after they expire. The dequeued message count increase by 1 and the message is no longer accessible. Depending on DLQ configuration, the message is routed appropriately. With a zero millisecond TTL (i.e. no expiration), broker redelivery schedules redeliveries on the proper intervals. A consumer setup to simply read and then rollback each message causes the message to dequeued, then the message is enqueued again after the appropriate delay. Eventually the broker discards the message after the maximumRedeliveries is exceeded. If I try to utilize a non-zero TTL with the redelivery policy enabled, I get some odd behavior. Without a consumer present, so that the message eventually expires, I find that it is initially discarded. The message disappears from the queue and the message dequeue increases by 1. The expired count also increases if I observe the JMX counters. However, the message does not seem to be routed to the DLQ, event though the configuration calls for expired messages to be sent there. In addition, after a short delay, the enqueue count also increases by 1. This message is not visible in the queue and cannot be retrieved by a consumer. Although the pending count indicates that a message remains, noting is actually consumable and the DLQ remains empty. What might cause this behavior? -- View this message in context: http://activemq.2283324.n4.nabble.com/Expired-messages-on-a-broker-with-redelivery-seem-seem-to-result-in-ghost-messages-tp4665586.html Sent from the ActiveMQ - User mailing list archive at Nabble.com.