Python 如何使用Pika发送和接收RabbitMQ消息?

Python 如何使用Pika发送和接收RabbitMQ消息?,python,rabbitmq,amqp,Python,Rabbitmq,Amqp,我在让Pika以与it AMQP或RabbitMQ文档一致的方式使用路由密钥或交换时遇到了一些问题。我知道RabbitMQ文档使用的是旧版本的Pika,所以我忽略了它们的示例代码 我要做的是定义一个队列“order”,并有两个使用者,一个处理交换或路由密钥“production”,另一个处理“test”。通过使用直接交换和路由键或主题交换,可以轻松地完成RabbitMQ文档 然而,皮卡似乎不知道如何处理交换和路由密钥。使用RabbitMQ管理工具来检查队列,很明显Pika要么没有正确地对消息进行

我在让Pika以与it AMQP或RabbitMQ文档一致的方式使用路由密钥或交换时遇到了一些问题。我知道RabbitMQ文档使用的是旧版本的Pika,所以我忽略了它们的示例代码

我要做的是定义一个队列“order”,并有两个使用者,一个处理交换或路由密钥“production”,另一个处理“test”。通过使用直接交换和路由键或主题交换,可以轻松地完成RabbitMQ文档

然而,皮卡似乎不知道如何处理交换和路由密钥。使用RabbitMQ管理工具来检查队列,很明显Pika要么没有正确地对消息进行排队,要么RabbitMQ将其丢弃

在消费者方面,我并不清楚应该如何将消费者绑定到exchange或处理路由密钥,文档也没有真正起到帮助作用

如果我放弃了所有的想法、交流和路由密钥,消息就会很好地排队,并且很容易被我的消费者处理


人们所拥有的任何指针或示例代码都会很好。

事实证明,我对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没有问题),但没有得到预期的结果。