gpt4 book ai didi

java - Rabbit MQ - 为什么我的设置不向所有客户端提供消息?

转载 作者:行者123 更新时间:2023-12-02 00:01:05 26 4
gpt4 key购买 nike

我有 JRuby 代码:

class Receiver

def initialize(channel_id)
@channel_id = channel_id

factory = ConnectionFactory.new
factory.setHost("localhost")
connection = factory.newConnection
@channel = connection.createChannel
@channel.exchangeDeclare(exchange_name, "direct");
@channel.queueDeclare(queue_name, true, false, false, nil)
@channel.queueBind(queue_name, exchange_name, routing_key)
@consumer = QueueingConsumer.new(@channel);
@channel.basicConsume(queue_name, true, @consumer);
end

def receive
String.from_java_bytes @consumer.nextDelivery.getBody
end

private

def queue_name
@channel_id
end

def exchange_name
@channel_id
end

def routing_key
@channel_id
end

end

此代码负责在我的架构中获取消息。但是,当我有 ie.两个具有相同channel_id(基本上是交换名称和路由 key )的 Receiver 实例,当我向此交换发送消息时,一条消息发送到一个接收者,一条消息发送到另一个接收者。为什么,我做错了什么?

最佳答案

问题是为什么你想让 2 个代理同时订阅一个队列来执行某些操作?一般来说,在 RabbitMQ 中,多个代理可以订阅一个队列,但它们都做相同的事情,这是出于冗余/负载平衡的目的。随机代理从队列中拾取消息并对其进行确认,然后清除该消息以防止其他人使用。

通常,队列意味着一个操作,并且监听的代理是等效的并且可以接收消息。如果您希望将消息发送到一个地方,然后广播给多个代理,最好使用扇出交换,并让每个代理在单独的队列上监听。

因此,将每个队列视为正在做一件事。您所描述的行为正是预期的。

请参阅this tutorial了解有关设置扇出交换以及不同交换的作用的详细信息。

关于java - Rabbit MQ - 为什么我的设置不向所有客户端提供消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14860510/

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