如何在Pika消费者中指定交换?

时间:2014-01-15 16:51:53

标签: rabbitmq pika

标题中的所有内容:在rabbitmq文档的下面方法中,我们看到发布将交换作为参数,但消费者并不这样做。

同时我在使用它时,消费者中的queue与发布中的routing_key相同?我认为路由密钥就像一个标签,以便订阅者订阅各种标签的正则表达式

要消费的代码:

import pika
def callback(ch, method, properties, body):
   print " [x] Received %r" % (body,)

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_consume(callback, queue='hello', no_ack=True)
channel.start_consuming()

要发布的代码:

import pika
connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
connection.close()

1 个答案:

答案 0 :(得分:0)

你对RabbitMQ中的工作原理感到困惑。在RabbitMQ中,您始终将消息发布到Exchange。交换与将消息路由到Queue(或一组队列)的逻辑接收器没有什么不同。

根据Exchange的类型,此路由会有所不同。有不同的类型:直接,扇出,主题和标题。您将ExchangeQueue相关联的方式是使用Binding。绑定由路由密钥或某些标头定义,它将您的消息从特定交换路由到特定队列。

因此,总而言之,您将消息发布到Exchange。您使用Queue的消息。并使用Binding将邮件从Exchange路由到Queue。也就是说,没有办法让消费者从Exchange消费。

在您的特定情况下,您在邮件中使用路由键“hello”。这意味着您需要BindingExchange调用''到Queue调用'hello',并使用与您的消息相同的路由键(即'hello')。我建议你更改名字和更多有用的名字来看看发生了什么。

希望这有帮助!