[rabbitmq-discuss] How to shutdown cleanly a Java application using Consumers?
michael.laing at nytimes.com
Thu Apr 3 17:54:20 BST 2014
I found this thread interesting but... we just pull the cable and let a
peer take over :) ml
On Thu, Apr 3, 2014 at 12:47 PM, Simon MacMullen <simon at rabbitmq.com> wrote:
> On 03/04/14 17:28, Bertrand Guay-Paquet wrote:
>> I tested this on RabbitMQ 3.2.4 and calling basicCancel for a consumer
>> tag does not interfere with the ability to basicAck a message currently
>> being processed
> That is correct.
> (I used Thread.sleep() in the consumer to ensure the
>> operation order). The handleCancelOk() method is only called after the
>> handleDelivery() method returns.
> That is also correct.
> From what I could piece together, calling basicCancel queues the
>> channel rpc command for execution after whatever is already queued. The
>> consumer even consumes its buffered messages (basicQos > 1) before
>> processing the cancel command.
> So there has been a certain lack of clarity in this thread. Two key points:
> * It is absolutely fine and normal to acknowledge a message after its
> consumer has been cancelled. The message remains acknowledgeable until the
> channel it was delivered on closes.
> * Once you have received basic.cancel-ok, you will not receive any more
> deliveries for that consumer.
> So the way to cleanly shut down a consumer in the Java client is:
> 1) Invoke basicCancel()
> 2) Process and acknowledge messages as usual
> 3) When handleCancelOk() gets called and you have acknowledged all
> messages you received before it, you can then consider yourself done, close
> channels and connections as appropriate.
>  I am assuming "cleanly" here means without causing messages to be
> redelivered. Otherwise you can just pull the network cable :-)
> Cheers, Simon
> Simon MacMullen
> RabbitMQ, Pivotal
> rabbitmq-discuss mailing list
> rabbitmq-discuss at lists.rabbitmq.com
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the rabbitmq-discuss