4

我目前正在评估 RabbitMQ 来管理队列。我想知道 RabbitMQ 如何管理内存中的队列项。

在此发布者订阅者示例中http://www.rabbitmq.com/tutorials/tutorial-three-python.html rabbitMQ 发布者订阅者

是否为每个订阅者(消费者)创建队列?例如,如果我有两个消费者,那么我将内存使用量加倍来存储消息?

我的印象是,如果我在一个队列上附加多个工作人员,那么它将成为一个工作队列,每个消费者都收到不同的消息。

假设我正在为此构建聊天服务器。我需要为每个消费者创建一个队列吗?并且内存中的每条消息都会乘以连接的用户数?还是内存中只有一条消息,并且每个队列都有指向该消息的指针。

同样在主题消息的示例中。http://www.rabbitmq.com/tutorials/tutorial-five-python.html

主题讯息

假设我有 1kb 消息。那么2个队列有2kb的内存使用吗?Q1、Q2 和说消息匹配所有的绑定键。

如果我添加了另一个队列来听让我们说lazy.blue.*Q3。这会在内存中创建一个新的队列项吗?并复制数据?

4

3 回答 3

3

来自:http ://www.rabbitmq.com/blog/2011/01/20/rabbitmq-backing-stores-databases-and-disks/

如果 Rabbit 需要节省内存并写入磁盘,则只保存一条消息。

以及它的队列特定状态是什么。第二条信息允许 RabbitMQ 启动,从磁盘恢复消息和队列,并确保每个队列中的消息与 RabbitMQ 关闭时的顺序相同。

因此 RabbitMQ 的默认后备存储由一个节点全局消息存储组成,它只关心将消息内容写入磁盘;和每个队列队列索引,它使用非常不同的格式将每个队列数据的每个消息写入磁盘“

于 2014-02-22T01:04:13.367 回答
1

在第一个示例中,您有一个发布者将消息发送到特定交换,并且该交换绑定到两个队列。

关于为每个消费者创建一个队列(我假设这就是你所说的“订阅者”的意思),这完全取决于你。在第一个图中,没有显示消费者,但您可以配置消费者以侦听这些队列中的一个或两者上的消息。队列(不是消费者)会影响你的记忆;相比之下,交换在内存成本方面很便宜。

对于第二个图表,是的,创建第三个队列“Q3”将在内存中创建一个新队列。我对你的最后一个问题有点困惑,你似乎在问如果交换发送一条匹配所有绑定模式的消息会发生什么?如果这发生在此处,则消息将简单地发送到所有三个队列。主题类型的交换(如示例中的交换设置)只是将消息路由到绑定键与消息的路由键匹配的所有队列。

于 2012-10-25T01:30:29.280 回答
0

我不是 rabbitmq 黑客,但常识说每个队列都应该有一个指向一个唯一消息实例的指针。

于 2012-10-24T09:03:28.500 回答