如何使用Pika发送和接收RabbitMQ消息?
问题描述:
我有一些问题让Pika以与AMQP或RabbitMQ文档一致的方式使用路由密钥或交换。我知道RabbitMQ文档使用较旧版本的Pika,所以我忽略了他们的示例代码。如何使用Pika发送和接收RabbitMQ消息?
我想要做的是定义一个队列“订单”,并有两个消费者,一个处理交换或routing_key“生产”和一个处理“测试”。从查看RabbitMQ文档,通过使用直接交换和路由密钥或使用主题交换,这些文档应该很容易完成。
但是Pika似乎并不知道如何处理交换和路由密钥。使用RabbitMQ管理工具检查队列,很显然,Pika要么没有正确排队消息,要么RabbitMQ只是将它扔掉。
在消费者方面,我不太清楚应该如何将消费者绑定到交易所或处理路由密钥,而且文档并没有真正的帮助。
如果我放弃所有的想法或交换和路由密钥,消息排队很好,很容易由我的消费者处理。
任何指针或示例代码的人都会很好。
答
事实证明,我对AMQP的理解并不完整。
的想法是如下:
客户:
获得连接应该不会在乎任何东西,但交换的名称和路由键后的客户端。这是我们不知道哪个队列,这将在结束了。
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”回调中是一个不错的地方,我们可以使用我们期望的路由密钥将队列绑定到交换机上。
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”现在将被路由到“测试”队列,其中消费者可以把它捡起来。
无效的问题:我从来没有看到任何标准的完成实施。他们总是缺乏实施细节。 – 2011-03-27 11:40:35
“文档使用较旧版本的Pika,所以我忽略了他们的示例代码。”这是一个真正的问题,影响到许多尝试从官方rabbitMQ网站上手(pika)的人。我甚至克隆了他们的示例代码,并试图运行它们(安装rabbitMQ服务器并且没有SELinux问题),但没有获得预期的结果。 – Andreas 2014-12-25 16:55:04