[rabbitmq-discuss] Queuing fundamentals.
ekirpichov at gmail.com
Tue Aug 2 10:04:56 BST 2011
I'm not sure how to set the prefetch size with the PHP library, and I
don't know whether the 'min' and 'max' parameters are related to it.
I believe that in theory, your scenario should work as you wished, if
you set prefetch to 1. It did for me at least, with the .NET client.
2011/8/1 Andrew <aph at repido.co.uk>:
> Hi Eugene ,
> My code is written in PHP and is using the PHP AMQP library (http://
> www.php.net/manual/en/book.amqp.php) and in my calls to the consume()
> method I am setting parameters that specify a minimum delivery of zero
> messages and a maximum of one. This I had hoped would just get one
> message from the queue at a time for me to process.
> Certainly what you suggest would explain the behaviour so perhaps my
> understanding of the parameters to the consume() method is wrong.
> Do you think that what I am trying to achieve should in theory work?
> If so, what should happen to message 3 after it's failed ACK? i.e.
> should my next request to the queue retrieve it, or will it always be
> delivered out of sequence after a failed ACK? If the latter is the
> case, how do I achieve ordered delivery of my messages even when my
> consume process dies and restarts?
> On Aug 1, 5:41 pm, Eugene Kirpichov <ekirpic... at gmail.com> wrote:
>> I suppose that you haven't set the prefetch count to 1.
>> So in fact you had messages 3,4,5,6 all delivered to you (so thought
>> the broker) and when the consumer died, the broker requeued all of
>> them in no particular sequence.
>> 2011/8/1 Andrew <a... at repido.co.uk>:
>> > Hi everybody,
>> > I wondered if somebody might be able to clarify some behaviour for me
>> > as I am getting confused about whether the scenario I am experiencing
>> > is due to a lack of understanding of how RabbitMQ works or something
>> > else.
>> > I have one reader process which may die due to system failure and at
>> > restart I'd like the same single consumer process to start up again
>> > and pick up where it left off. So a summary of what I'd like to happen
>> > is:
>> > (1) My transmitter process sends and queues up messages 1, 2, 3, 4, 5
>> > & 6.
>> > (2) My single consumer process reads and acknowledges messages 1 and 2
>> > in sequence.
>> > (3) My consumer process reads message 3 and then dies without
>> > acknowledging.
>> > (4) I restart my consumer process which will request the next message,
>> > which should be the unacknowledged message (3).
>> > (5) My consumer process would then continue reading messages from the
>> > queue (4, 5, & 6) in sequence.
>> > What I am experiencing is that when my consumer process is restarted
>> > messages 3, 4, 5 & 6 are delivered out of sequence and all with a
>> > redelivery count of 1. I understand that message 3 might be out of
>> > sequence because it was unacknowledged and from what I have read, when
>> > a message is redelivered then it's sequence is no longer guaranteed.
>> > However I'm not clear as to why the remaining queued messages are out
>> > of sequence too.
>> > More importantly is what I am trying to do is something that is
>> > contrary to how RabbitMQ works, or am I just going about it the wrong
>> > way?
>> > Many thanks for your help,
>> > Andrew
>> > _______________________________________________
>> > rabbitmq-discuss mailing list
>> > rabbitmq-disc... at lists.rabbitmq.com
>> Eugene Kirpichov
>> Principal Engineer, Mirantis Inc.http://www.mirantis.com/
>> rabbitmq-discuss mailing list
>> rabbitmq-disc... at lists.rabbitmq.comhttps://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss
> rabbitmq-discuss mailing list
> rabbitmq-discuss at lists.rabbitmq.com
Principal Engineer, Mirantis Inc. http://www.mirantis.com/
More information about the rabbitmq-discuss