RabbitMQ扇出交换有问题

时间:2013-03-11 15:24:59

标签: rabbitmq messaging amqp rabbitmq-exchange

我可以使用Publish/Subscribe RabbitMQ Java教程创建扇出交换,任何连接的消费者都将收到消息的副本。我想在连接任何消费者之前创建交换和绑定,而不是动态地/以编程方式声明交换和绑定。我是通过RabbitMQ管理控制台完成的。但是,出于某种原因,我的消费者正在以循环方式接收消息,而不是全部接收消息的副本。我错过了什么?以下是一些代码段:

出版商:

channel.basicPublish("public", "", null, rowId.getBytes("UTF-8"));

消费者:

QueueingConsumer consumer = new QueueingConsumer(channel);
            channel.basicConsume("myqueue", false, consumer);

...在RabbitMQ管理控制台中,我创建了一个类型为“fanout”的交换“public”,并且我将该交换的绑定设置为“myqueue”。

我很感激任何帮助!

1 个答案:

答案 0 :(得分:20)

听起来您的所有消费者都订阅了相同的队列。当多个消费者订阅同一队列时,RabbitMQ的默认行为是在所有订阅的消费者之间循环消息。请参阅RabbitMQ Tutorial #2: Work Queues中的“循环调度”。

扇出交换用于确保绑定到它的每个队列都获得消息的副本,而不是每个消费者。如果您希望每个使用者获取该消息的副本,通常您将让每个使用者创建自己的队列,然后绑定到该交换。我不确定你为什么要试图以编程方式创建/绑定队列,但如果你提前知道订阅者的数量并为每个队列创建一个队列,你就可以获得相同的效果。

相关问题