Thanks for the information, Mark!

We ended up rolling our own redelivery logic similar to your setup. We have asynchronous listeners which, on recoverable error, create a copy of the message and place it on a separate redelivery queue. The message copy has an additional property which specifies the redelivery time (current time + predefined delay). We then have a synchronous listener on the redelivery queue which runs every 5 seconds and uses a message selector to pull messages off of the queue which have a redelivery time < the current time and place them back onto their original queue.

Thanks again for your insights.

Geoff.

On Oct 16, 2009, at 3:19 PM, magellings wrote:


Yes. The way we are doing it is adding a bit of metadata into the message to
keep a redelivery count.  This is added only when we want to do a
redelivery.

Our framework sits on top of the NMS ActiveMQ provider (.NET). It parses the metadata from the message. This redelivery logic is abstracted away
from the many consumers using our framework and their main logic.  It
executes a redelivery policy before delegating the work to the consumer to
actually process the message.

If the redelivery count is exhausted according to the redelivery policy, we simply acknowledge the message without re-cloning, hence redelivering it.

As I've been coding it I wonder how necessary it really is to have this functionality though. If you have enough consumers in your cluster it seems the transactional mode would be sufficient. It just so happens our previous messaging framework retried messages by placing them at the end of the queue
so this is more of legacy support than anything.

Regards


Geoffrey Arnold-2 wrote:

Hey Mark,

We ended up opting to put the message back on the end of the queue
instead of rolling back, but this leads to repeated reprocessing of
the message.  My guess is that you have solved this with metadata:

Our framework is sophisticated enough to
manage redeliveries in this way by adding some redeliveredCnt
metadata to
the message each time it is cloned.

Can you elaborate?

Thanks,
Geoff.



--
View this message in context: 
http://www.nabble.com/Transactions-and-redelivery-tp25915300p25930878.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Reply via email to