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.

Reply via email to