[rabbitmq-discuss] publishing inside a transaction before acking
mikeb at rabbitmq.com
Tue May 18 12:04:15 BST 2010
> we have scenarios where we pick up a message at a time, perform a bunch
> of operations, publish a new message and then ack the message we just
> picked up. Recently we have started to publish the new message inside a
> transaction since this guarantees that the message is persisted (it's a
> persistent message), since we want to minimize the odds of message loss.
> However, we have started to notice that the original message we pick up
> is marked as unacknowledged after we complete our process. Is there
> something fundamentally wrong in what we're doing, or is our approach
The approach is correct. What order are you doing things in?
Transactions are implicitly started immediately after a commit or
rollback, and acknowledgements are transactional, so if you're
committing after the publish but before the ack --
the state at this point is a published message, and an uncommitted
transaction with the ack. If you do this:
then you'll have atomically acked the old message and published the new
one; which is, I believe, what you want.
More information about the rabbitmq-discuss