标题中的所有内容:在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()
答案 0 :(得分:0)
你对RabbitMQ中的工作原理感到困惑。在RabbitMQ中,您始终将消息发布到Exchange
。交换与将消息路由到Queue
(或一组队列)的逻辑接收器没有什么不同。
根据Exchange
的类型,此路由会有所不同。有不同的类型:直接,扇出,主题和标题。您将Exchange
与Queue
相关联的方式是使用Binding
。绑定由路由密钥或某些标头定义,它将您的消息从特定交换路由到特定队列。
因此,总而言之,您将消息发布到Exchange
。您使用Queue
的消息。并使用Binding
将邮件从Exchange
路由到Queue
。也就是说,没有办法让消费者从Exchange
消费。
在您的特定情况下,您在邮件中使用路由键“hello”。这意味着您需要Binding
从Exchange
调用''到Queue
调用'hello',并使用与您的消息相同的路由键(即'hello')。我建议你更改名字和更多有用的名字来看看发生了什么。
希望这有帮助!