I ran a test case where a durable subscriber was listening from a topic and a publisher is publishing persistent messages. I observed that the messages were stored in the DB (ACTIVEMQ_MSGS table) but even after successful consumption by the consumer, these messages were not deleted from the backend DB. However I have seen that this doesn't happen in case of queue. Persistent messages sent to a queue are automatically deleted from the DB once successfully consumed by the consumer.
1. 1 producer 1 durable subscriber. Subscriber is in auto_ack mode.
2. Producer sent 100 persistent messages to consumer
3. Consumer successfully consumed them.
4. DB still has those messages.
5. Stop producer and consumer both, but messages are still there.
6. Even after restarting broker, message does not get deleted.
This is a very generic use case which should never happen. It is also reproducible.