1

全部在标题中:在 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()
4

1 回答 1

1

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

此路由的发生方式因Exchange. 有不同的类型:直接、扇出、主题和标题。将 an 链接Exchange到 a的方式Queue是使用Binding. 绑定由路由键或某些标头定义,它将您的消息从特定交换路由到特定队列。

因此,总而言之,您将消息发布到Exchange. 您使用来自Queue. 并且您使用 aBinding将消息从 路由ExchangeQueue。也就是说,没有办法说消费者从Exchange.

在您的特定情况下,您在消息中使用路由键“hello”。这意味着您需要一个Binding从您的Exchange被叫 '' 到Queue被叫 'hello' 的路由键与您的消息(即“hello”)具有相同的路由键。我建议您更改名称并使用更多有用的名称以查看发生了什么。

希望这可以帮助!

于 2014-01-15T17:20:18.957 回答