Python 如何使用Pika发送和接收RabbitMQ消息?
我在让Pika以与it AMQP或RabbitMQ文档一致的方式使用路由密钥或交换时遇到了一些问题。我知道RabbitMQ文档使用的是旧版本的Pika,所以我忽略了它们的示例代码 我要做的是定义一个队列“order”,并有两个使用者,一个处理交换或路由密钥“production”,另一个处理“test”。通过使用直接交换和路由键或主题交换,可以轻松地完成RabbitMQ文档 然而,皮卡似乎不知道如何处理交换和路由密钥。使用RabbitMQ管理工具来检查队列,很明显Pika要么没有正确地对消息进行排队,要么RabbitMQ将其丢弃 在消费者方面,我并不清楚应该如何将消费者绑定到exchange或处理路由密钥,文档也没有真正起到帮助作用 如果我放弃了所有的想法、交流和路由密钥,消息就会很好地排队,并且很容易被我的消费者处理Python 如何使用Pika发送和接收RabbitMQ消息?,python,rabbitmq,amqp,Python,Rabbitmq,Amqp,我在让Pika以与it AMQP或RabbitMQ文档一致的方式使用路由密钥或交换时遇到了一些问题。我知道RabbitMQ文档使用的是旧版本的Pika,所以我忽略了它们的示例代码 我要做的是定义一个队列“order”,并有两个使用者,一个处理交换或路由密钥“production”,另一个处理“test”。通过使用直接交换和路由键或主题交换,可以轻松地完成RabbitMQ文档 然而,皮卡似乎不知道如何处理交换和路由密钥。使用RabbitMQ管理工具来检查队列,很明显Pika要么没有正确地对消息进行
人们所拥有的任何指针或示例代码都会很好。事实证明,我对AMQP的理解是不完整的 其思路如下: 客户端: 获得连接后的客户机不应该关心任何其他事情,只关心exchange的名称和路由密钥。也就是说,我们不知道这将在哪个队列中结束
channel.basic_publish(exchange='order',
routing_key="order.test.customer",
body=pickle.dumps(data),
properties=pika.BasicProperties(
content_type="text/plain",
delivery_mode=2))
消费者
当通道打开时,我们声明交换和队列
channel.exchange_declare(exchange='order',
type="topic",
durable=True,
auto_delete=False)
channel.queue_declare(queue="test",
durable=True,
exclusive=False,
auto_delete=False,
callback=on_queue_declared)
当队列准备就绪时,在“on_queue_declared”回调中,我们可以使用所需的路由密钥将队列绑定到exchange
channel.queue_bind(queue='test',
exchange='order',
routing_key='order.test.customer')
#handle_delivery is the callback that will actually pickup and handle messages
#from the "test" queue
channel.basic_consume(handle_delivery, queue='test')
使用路由键“order.test.customer”发送到“order”交换机的消息现在将被路由到“test”队列,消费者可以从中提取消息 无效问题:我从未见过任何标准的实现是完整的。他们在实现中总是缺少某些细节。“文档使用的是旧版本的Pika,所以我忽略了它们的示例代码。”这是一个真正的问题,影响了许多试图从rabbitMQ官方网站开始(使用Pika)的人。我甚至克隆了它们的示例代码,并尝试运行它们(安装了rabbitMQ服务器,SELinux没有问题),但没有得到预期的结果。