txamqp-user team mailing list archive
-
txamqp-user team
-
Mailing list archive
-
Message #00056
How to clean up
Sorry if you get this message twice; launchpad sucks.
I have a long-running server processes that listen for new messages from
some changing set of rooms. I want to make sure that when I'm done with a
particular room, all the resources associated with it are eventually freed.
Here's what my Room init code does:
@inlineCallbacks
def startListening(self):
routing_key = 'rooms.' + self.id
queue_name = routing_key + '::' + CYCLONE_ID
AMQP_CHANNEL.queue_declare(queue=queue_name, durable=False,
auto_delete=True)
AMQP_CHANNEL.exchange_declare(exchange=EXCHANGE_NAME, type='topic',
durable=True)
AMQP_CHANNEL.queue_bind(
queue=queue_name,
exchange=EXCHANGE_NAME,
routing_key=routing_key)
consumer_tag = 'room' + self.id
AMQP_CHANNEL.basic_consume(queue=queue_name,
consumer_tag=consumer_tag)
queue = yield AMQP_CONNECTION.queue(consumer_tag)
while True:
msg = yield queue.get()
self.tell_msg(msg)
Note that the AMQP connection+channel are global. When the server wants to
forgot about a room, what do I have to do to ensure that all resources will
eventually be garbage collected? Does it suffice to cancel the consumer? Do
I have to close the TimeoutDeferredQueue? Looking at the code in
protocol.py, it looks like there might be no way to make the channel forget
about the queue. Am I reading that correctly? If so, that means I would need
a new channel for each room, right?
Thanks,
Andrew
Follow ups