[rabbitmq-discuss] fanout exchange that does not keep messages

Matthias Radestock matthias at lshift.net
Mon Jul 20 17:54:56 BST 2009


Brian,

Brian Whitman wrote:
> Hmm... this is not working the way I expect. 
> 
> If I do either Holger or Matthias's solution the write-only "logger"
> queue continues to grow but the listener queues do stay at 0:
> 
> ~/rabbitmq-server/scripts# ./rabbitmqctl list_queues name mode messages
> messages_ready messages_unacknowledged durable
> Listing queues ...
> logger_2b02ca30-754b-11de-99c0-0023dfde57d8 mixed 0 0 0 false
> logger mixed 110 110 0 false
> 
> What I would like to see here is that logger is always 0 messages. If
> there are listeners or not, I don't want the queue called "logger" to
> ever retain any messages. 
> 
> For both "logger" (write only) and the random queue names (read only) I
> am doing
> 
>     ch.exchange_declare(my_exchange, 'fanout', durable=False,
> auto_delete=False)
>     qname, n_msgs, n_consumers = ch.queue_declare(queue_name,
> durable=False, exclusive=False, auto_delete=True)
> 

If you have declared logger_* and logger as auto_delete then they should
not show up in list_queues *unless*

- both of them currently have consumers

- both of them have never had any consumers

The former case is presumably correct behaviour for you, so I suspect
what you are seeing is an instance of the second behaviour. The question
then is: How did you end up with queues that have never had any
consumers? Generally the way to avoid that is to make the *consumers*
perform these three steps:

1) declare auto-delete (or exclusive, if there is only one consumer per
queue) queue
2) bind queue
3) consume from queue

Note that queue declaration and binding are idempotent.


Matthias.
PS: I see you are using a development branch of the server. That could
have bugs in that area, so please try to get things working first using
the 1.6.0 release.




More information about the rabbitmq-discuss mailing list