RabbitMQ扇出交换出现问题

RabbitMQ扇出交换出现问题,rabbitmq,messaging,amqp,rabbitmq-exchange,Rabbitmq,Messaging,Amqp,Rabbitmq Exchange,我能够使用RabbitMQ Java教程创建扇出交换,任何连接的使用者都将收到消息的副本。我希望在连接任何使用者之前创建exchange和绑定,而不是动态/编程地声明exchange和绑定。我已经通过RabbitMQ管理控制台完成了这项工作。然而,出于某种原因,我的消费者正在以循环方式接收消息,而不是接收消息的所有副本。我错过了什么?以下是一些代码片段: 出版商: channel.basicPublish("public", "", null, rowId.getBytes("UTF-8"));

我能够使用RabbitMQ Java教程创建扇出交换,任何连接的使用者都将收到消息的副本。我希望在连接任何使用者之前创建exchange和绑定,而不是动态/编程地声明exchange和绑定。我已经通过RabbitMQ管理控制台完成了这项工作。然而,出于某种原因,我的消费者正在以循环方式接收消息,而不是接收消息的所有副本。我错过了什么?以下是一些代码片段:

出版商:

channel.basicPublish("public", "", null, rowId.getBytes("UTF-8"));
消费者:

QueueingConsumer consumer = new QueueingConsumer(channel);
            channel.basicConsume("myqueue", false, consumer);
…在RabbitMQ管理控制台中,我创建了一个类型为“fanout”的exchange“public”,并设置了从该exchange到“myqueue”的绑定


我将感谢任何帮助

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


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

这个答案对我很有帮助,谢谢!我一直认为每个绑定的消费者都会收到消息的副本,而不是每个绑定的队列。这解决了我的问题。再次感谢!我在文档中找不到这个解释。他们告诉我使用临时队列名称,但没有说明原因。我想我应该为每个人使用一个名为“global_messages”的队列,为什么不呢?然后它就不起作用了。将交换设置为扇出只是pussle的一半。这是丢失的关键信息。非常感谢。