使用pika将所有消息从一个队列重新排队到另一个队列

时间:2014-09-04 18:59:25

标签: python queue rabbitmq pika

我需要循环回调队列中的所有消息,然后关闭回调。我需要它在队列为空时停止消费。 所以我将消息从一个队列写到另一个队列。

creds = pika.PlainCredentials(app.config['mq.user'], app.config['mq.pass']) connection = pika.BlockingConnection(pika.ConnectionParameters( host=app.config['mq.host'], credentials=creds)) connection2 = pika.BlockingConnection(pika.ConnectionParameters( host=app.config['mq.host'], credentials=creds))

    channel = connection.channel()
    channel2 = connection2.channel()

Def requeue_callback(ch, method, properties, body):
try:
    msg = json.loads(body)
    ch2.basic_publish(exchange='',
                      routing_key=base_queue+'.request',
                      body = msg['orig_msg'])
finally:
    ch.basic_ack(delivery_tag = method.delivery_tag)

channel.basic_consume(requeue_callback,
                  queue=base_queue+'.error')

channel.start_consuming()

*或者,我可以找到队列中的消息数,然后使用该特定数字。在这种情况下,我将如何重新排队特定号码。

1 个答案:

答案 0 :(得分:0)

在回调函数中,您可以使用passive=True声明队列,然后使用结果来获取消息计数。

例如:

>>> ch = rabbit.connection.channel()
>>> method = ch.queue_declare('sandbox', passive=True)
>>> method.method.message_count
23
>>> 

然后检查这个数字是否为0。