gpt4 book ai didi

memory-management - RabbitMQ 内存管理和复制

转载 作者:行者123 更新时间:2023-12-04 07:41:58 24 4
gpt4 key购买 nike

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

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

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

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

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

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

Topic message

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

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

最佳答案

发件人:http://www.rabbitmq.com/blog/2011/01/20/rabbitmq-backing-stores-databases-and-disks/

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

“队列自己决定何时以及是否将消息写入磁盘。但一条消息可以发送到多个队列,确保每条消息只写入磁盘一次显然是有利的。但是,有两条不同的信息这里:首先,消息内容本身。这在消息发送到的每个队列中都是相同的,并且应该只写入磁盘一次,无论它进入的队列数量是多少;请注意,后续写入会这样做不需要进行值比较:如果后备存储知道消息的 ID,那么消息正文将匹配磁盘上已经存在的内容——消息内容永远不会被代理更改。第二条信息是存在每个队列中的消息:它在队列中的位置,它的邻居是什么,以及它的队列特定状态是什么。第二条信息是允许 RabbitMQ 启动、从磁盘恢复消息和队列并确保th每个队列中的消息与 RabbitMQ 关闭时的顺序相同。

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

关于memory-management - RabbitMQ 内存管理和复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13044987/

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