使用Pika客户端轮询RabbitMQ消息

时间:2013-02-28 15:11:25

标签: python rabbitmq pika

我想用Python创建一个RabbitMQ接收器/消费者,我不知道如何检查消息。我试图在我自己的循环中执行此操作,而不是使用pika中的回调。

如果我理解了什么,在Java客户端中我可以使用getBasic()检查是否有任何消息可用而没有阻塞。我不介意在收到邮件时阻止,但我不想在收到消息之前阻止。

我没有找到任何明确的例子,还没有找到pika中的相应电话。

3 个答案:

答案 0 :(得分:1)

如果您想同步进行,那么您需要查看鼠标BlockingConnection

  

BlockingConnection在Pika的异步之上创建一个图层   核心提供方法将阻止它们的预期响应   已经回来了。由于Basic.Deliver和。的异步性质   Basic.Return从RabbitMQ调用到你的应用程序,你仍然是   需要实现延续传递样式的异步方法   如果你想使用basic_consume或者来自RabbitMQ的消息   如果您希望在使用时收到交付失败的通知   basic_publish。

更多信息和示例

https://pika.readthedocs.org/en/0.9.12/connecting.html#blockingconnection

答案 1 :(得分:1)

您可以使用此回答Get Queue Size in Pika (AMQP Python)

的示例定期检查队列大小

答案 2 :(得分:1)

队列处理循环可以在process_data_events()

的帮助下迭代完成
import pika

# A stubborn callback that still wants to be in the code.
def mq_callback(ch, method, properties, body):
    print(" Received: %r" % body)

connection = pika.BlockingConnection(pika.ConnectionParameters("localhost"))
channel = connection.channel()
queue_state = channel.queue_declare(queue="test")
# Configure a callback.
channel.basic_consume(mq_callback, queue="test")

try:
    # My own loop here:
    while(True):
        # Do other processing

        # Process message queue events, returning as soon as possible.
        # Issues mq_callback() when applicable.
        connection.process_data_events(time_limit=0)
finally:
    connection.close()