[rabbitmq-discuss] SharedQueue closed error

Michael Klishin mklishin at gopivotal.com
Wed Apr 2 21:50:42 BST 2014


On 3 April 2014 at 00:40:40, anate (ambatinr at hotmail.com) wrote:
> > I declared a queue with persistent message using PHP and trying  
> to consume
> the message in C#. I received 'SharedQueue closed error' at this  
> line.

What is in RabbitMQ log (when you see the exception)?

> channel.BasicAck(ea.DeliveryTag, false);
> I am assuming the persistent message shouldn't delete from queue  
> but after
> Dequeue() message getting deleted.

Your understanding is not correct. Persistent messages survive RabbitMQ
restart. They are deleted from the queue when they are acknowledged.

Since you use channel.BasicConsume("hello-queue", true, consumer),
messages are considered to be acknowledged as soon as RabbitMQ sends
them out to consumers. There is no need to ack them (and acking them
will result in a protocol exception).

QueueingConsumer will accumulate deliveries locally in a shared queue.
My guess is that QueueingConsumer shuts the shared internal queue down
when a protocol exception occurs.

Judging from your code you don’t need to use a QueueingConsumer. Simply
subclass DefaultConsumer and override HandleDelivery.

HTH. 
--  
MK  

Software Engineer, Pivotal/RabbitMQ


More information about the rabbitmq-discuss mailing list