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



      

Reply via email to