[rabbitmq-discuss] Ordering of messages after txRollback()

Oleg Zhurakousky ozhurakousky at vmware.com
Sun Jun 6 19:28:56 BST 2010


Right and that is what I am essentially asking. If txRollback on the consumer side is un-doing the ack (at least I can observe this behavior), I thought that there is a difference between how re-queue is done when simply not acking the message (to the back of the queue) vs acked message but rolled back (to the front of the queue). But i guess its already been answered in a way  that the spec is silent about ordering.

Oleg

On Jun 6, 2010, at 2:13 PM, Mark Fisher wrote:

> The only thing a rollback on the consuming side can do is *undo acks*,  
> and there's no difference between never acking and rolling back acks  
> as far as the broker is concerned. I'm just mentioning that since - if  
> I'm understanding correctly - it is a valid if limited use for TXs on  
> the consumer side.
> 
> Sent from my iPhone
> 
> On Jun 6, 2010, at 2:05 PM, "Oleg Zhurakousky"  
> <ozhurakousky at vmware.com> wrote:
> 
>> Thanks Matthew
>> 
>> Let me get this straight. TX are only for publishers, not consumers,  
>> thus the only way to implement TX behavior on the consumer side is  
>> by not sending ACK. Is that correct?
>> 
>> Since the spec is "completely silent" on the 'ordering', does that  
>> mean that when I retrieve messages initially and they come in order  
>> it is just a coincidence?
>> I was under the impression that Queue semantics imply FIFO ordering,  
>> regardless of which spec implements such Queue. Am I missing  
>> something?
>> 
>> Cheers
>> Oleg
>> 
>> 
>> On Jun 6, 2010, at 1:32 PM, Matthew Sackman wrote:
>> 
>>> On Sun, Jun 06, 2010 at 09:58:20AM -0700, Oleg Zhurakousky wrote:
>>>> I have a simple test where I receive 20 messages in the order in  
>>>> which they came in, then rollback each and every one of them.
>>>> 
>>>> Upon the next attempt to receive messages the order is completely  
>>>> arbitrary. Is this by design?
>>> 
>>> Yes, pretty much. Not quite sure what you mean by rollback though:
>>> Transactions are only on what you send to the server, not what it  
>>> sends
>>> to you. I suspect you're not meaning to use transactions and are
>>> actually just closing the connection or channel on which you've  
>>> done the
>>> consume, which will cause all unacked messages to be requeued. If you
>>> use basic.recover{requeue=true} then the order will be more  
>>> predictable,
>>> however, that's a facet of the design: the spec is completely  
>>> silent on
>>> the order, and you should not rely on RabbitMQ doing any particular
>>> ordering.
>>> 
>>> Matthew
>>> _______________________________________________
>>> rabbitmq-discuss mailing list
>>> rabbitmq-discuss at lists.rabbitmq.com
>>> http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
>> 
>> _______________________________________________
>> rabbitmq-discuss mailing list
>> rabbitmq-discuss at lists.rabbitmq.com
>> http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss



More information about the rabbitmq-discuss mailing list