RabbitMQ路由密钥不路由

时间:2016-02-29 07:48:51

标签: rabbitmq message-queue rabbitmq-exchange

我正在尝试用RabitMQ做一个简单的消息队列我用create_message推送一条消息

然后尝试通过路由密钥获取消息。

当路由键相同时,它很有用。问题是当路由密钥不同时我继续使用错误的路由密钥获取消息: 例如

def callback(ch, method, properties, body):
    print("%r:%r" % (method.routing_key, body))

def create_message(self):
    connection = pika.BlockingConnection(pika.ConnectionParameters(
           'localhost'))
    channel = connection.channel()
    channel.exchange_declare(exchange='www')
    channel.queue_declare(queue='hello')
    channel.basic_publish(exchange='www',
                  routing_key="11",
                  body='Hello World1111!')
    connection.close()
    self.get_analysis_task_celery()


def get_message(self):
    connection = pika.BlockingConnection(pika.ConnectionParameters(
           'localhost'))
    channel = connection.channel()
    channel.exchange_declare(exchange='www')
    timeout = 1
    connection.add_timeout(timeout, on_timeout)
    channel.queue_bind(exchange="www", queue="hello", routing_key="10")
    channel.basic_consume(callback,
                  queue='hello',
                  no_ack=True,
                  consumer_tag= "11")

    channel.start_consuming()

我的输出示例:'11':'Hello World1111!'

我做错了什么?

tnx的帮助

1 个答案:

答案 0 :(得分:0)

这是一个总猜测,因为我看不到你的rabbitmq服务器..

如果您打开RabbitMQ管理网站并查看您的交换机,您可能会看到交换机绑定到路由密钥10和11的队列,这两个路由都绑定到同一个队列。

由于两者都进入同一个队列,您的消息将始终传递到该队列,消费者将始终收到消息

再次,我猜,因为我看不到你的服务器。但检查服务器以确保没有剩余/额外绑定