Hello, We have a large number (thousands) of durable subscribers that subscribe to a set of topics. These consumers will be connecting/disconnecting frequently, and we must ensure that they receive messages sent while they are disconnected (hence durable subscriptions). These durable subscriptions will be created after important messages have been sent, so we must also ensure that the consumers receive messages retroactively, according to our subscription recovery policy.
Unfortunately, the retroactive consumer behavior + durable subscriptions do not mix well. When connecting a durable subscription while using the activemq.retroactive header (we use STOMP), we receive all retroactive messages every time we connect. It looks like from JIRA AMQ-1549 (https://issues.apache.org/activemq/browse/AMQ-1549) that the durable subscriptions with retroactive behaved as desired in the 4.X release of activemq. The bug is open and assigned, with fixed version marked as 5.3 (although no work has been done yet). However, there's a bit of a conflicting report here: http://www.nabble.com/Durable-subscriptions-to19688854.html . Bruce and James seem to agree that subscription recovery policy is only for non-durable subscriptions. So I'm wondering which is accurate: Is this a bug since in 5.X that just hasn't been worked on yet? Or is this the desired behavior with no plans to change it? Of course, my vote is in for the former rather than the latter. I think it would be desirable in general (not just my case) for durable subscriptions to play nicely with the subscription recovery policy. That said, I'm also wondering if there's any advice for my particular case. I'd love to work on a patch, but we are a small team up against a tight deadline and we have no experience with the Activemq source -- I'm not sure this is something we can tackle right now. If we aren't able to get the desired behavior from activemq, each consumer could send the retroactive header only the very first time they connect. However, there's no clear way (that I can see) to tell when all retroactive messages have been received. So the consumer may make the first connection retroactive, but how does it know that it successfully received all retroactive messages and shouldn't use the retroactive header next time? Thank you for your attention, JLuna