有没有方法定义一个RabbitMQ消费者,使其在不阻塞程序的情况下持续监听队列?
我正在做一个项目,使用Python和RabbitMq。最开始,管理员会验证一个订单,然后把它发布到RabbitMq的消息队列“verified_orders”中。我想要一个消费者,它可以持续监听这个消息队列,消费一个订单,并把详细信息发送回客户端,但又不想让整个程序都卡住。
我看过一些RabbitMQ的教程,里面有这样的代码:假设已经建立了与RabbitMQ的连接。
发布消息的代码:
channel.basic_publish(exchange='',
routing_key='verified_orders',
body='Hello World!')
print(" [x] Sent 'Hello World!'")
消费消息的代码:
def callback(ch, method, properties, body):
print(f" [x] Received {body}")
channel.basic_consume(queue='verified_orders',
auto_ack=True,
on_message_callback=callback)
channel.start_consuming()
当执行start_consuming()时,它会无限期地等待数据并运行回调函数,但这会让程序进入一个阻塞状态,而我正想避免这种情况。
我找到的另一种方法是定义一个带有无限循环的异步函数来消费消息,但我觉得使用无限循环并不是一个好的方法。
channel.basic_get(queue='verified_orders', auto_ack=True)