Hi,
Prefetch count limits the number of unacknowledged messages, so you
would need to acknowledge the last message to get the next one if the
prefetch count was set to 1.
You should never need to close the channel for flow control. You can use
IModel.ChannelFlow() if you need to temporarily stop the broker from
delivering messages. This works independently from the prefetch count.
-Emile
On 15/06/11 10:55, T-zex wrote:
> Thank you!
>> When prefetch count is set to 1 channel will try to fetch the next
> message as soon as HandleBasicDeliver returns? Should I invoke
> Channel.Close() on a different thread (to avoid blocking) and then
> return?
>> On Wed, Jun 15, 2011 at 10:33 AM, Emile Joubert <emile at rabbitmq.com> wrote:
>> Hi,
>>>> On 15/06/11 10:08, T-zex wrote:
>>> Hi,
>>>>>> We are overriding DefaultBasicConsumer.HandleBasicDeliver method and
>>> use IModel.BasicConsume to subscribe to incoming messages:
>>> model.BasicConsume(queue, false, instanceOfDerivedConsumer);
>>>>>> When application fails to ack a message that message is requeued. How
>>> can I guarantee that BasicConsume is receiving one message at a time?
>>> How to deterministically stop consuming when application detects that
>>> it is unable to process a message and prevent the second message from
>>> arriving? How to make sure that there is one and only one unacked
>>> message and that message is at the peak of broker queue.
>>>> The solution is to set the prefetch count of the channel to 1 using
>> IModel.BasicQos(). Also see
>>http://www.rabbitmq.com/amqp-0-9-1-quickref.html#basic.qos .
>> Note that rabbit does not implement the prefetch size or global
>> parameters to the same method.