amqp queue_delete ловит ошибки асинхронным способом - PullRequest
1 голос
/ 14 марта 2011

Я только начал использовать pika (v 0.9.4) с Tornado (с помощью pika.adapters.tornado_connection.TornadoConnection), и мне было интересно, как правильно отлавливать ошибки при использовании, скажем: queue_delete для случаев, когдаочередь, которую вы пытаетесь удалить, не существует.RabbitMQ вызывает AMQPError, но я не уверен, как это можно сделать асинхронным способом.

У кого-нибудь есть какие-либо идеи по этому поводу?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2011

Постарайтесь избежать ошибки.Если вы объявите соединение с очередью, а оно не существует, оно будет создано.Затем немедленно удалите его.

Или, если вы будете использовать эту очередь снова на следующей неделе или около того, т.е. она не одноразовая, просто оставьте ее и обработайте удаление как действие системного администратора, которое очищаетдлительных незанятых очередей.

Или просто объявите свои очереди с атрибутом автоудаления, и они исчезнут при отключении.

0 голосов
/ 18 марта 2011

Отказ от ответственности: я автор stormed-amqp

Я бы предложил попробовать с stormed-amqp

import logging
logging.basicConfig()

from tornado.ioloop import IOLoop
from stormed import Connection

def on_connect():
    ch = conn.channel()
    ch.queue_declare(queue='hello', durable=False)
    ch.queue_declare(queue='hello', durable=True)

def on_error(e):
    print "Got Connection error", e.reply_text, e.reply_code
    io_loop.stop()

conn = Connection(host='localhost')
conn.on_error = on_error
conn.connect(on_connect)
io_loop = IOLoop.instance()
io_loop.start()
...