gpt4 book ai didi

rabbitmq - RabbitMQ 扇出交换问题

转载 作者:行者123 更新时间:2023-12-04 04:55:21 30 4
gpt4 key购买 nike

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

出版商:

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

消费者:
QueueingConsumer consumer = new QueueingConsumer(channel);
channel.basicConsume("myqueue", false, consumer);

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

我会很感激任何帮助!

最佳答案

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

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

关于rabbitmq - RabbitMQ 扇出交换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15342340/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com