我正在做一个项目,在Python中使用RabbitMq。最初,管理员验证一个订单,然后将其发布在 RabbitMq 消息队列“verified_orders”中,我希望有一个消费者持续侦听此 MQ,消费订单并将其详细信息发送回客户端,但不阻塞状态整个计划。
我看过 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)