RabbitMQ实际上是如何物理存储消息的?

RabbitMQ实际上是如何物理存储消息的?,rabbitmq,Rabbitmq,我想知道RabbitMQ如何在其RAM和磁盘中物理存储消息 我知道RabbitMQ试图将消息保存在内存中(但我不知道消息是如何放入Ram的)。但是,当消息处于持久模式或代理具有内存压力时,消息可能会溢出到磁盘中。(但我不知道这些消息是如何存储在磁盘中的。) 我想知道关于这些的内部信息。不幸的是,其主页中的官方文件没有披露内部细节 我应该为此阅读哪个文档?RabbitMQ使用自定义数据库存储消息,数据库通常位于以下位置: /var/lib/rabbitmq/mnesia/rabbit@hostna

我想知道RabbitMQ如何在其RAM和磁盘中物理存储消息

我知道RabbitMQ试图将消息保存在内存中(但我不知道消息是如何放入Ram的)。但是,当消息处于持久模式或代理具有内存压力时,消息可能会溢出到磁盘中。(但我不知道这些消息是如何存储在磁盘中的。)

我想知道关于这些的内部信息。不幸的是,其主页中的官方文件没有披露内部细节


我应该为此阅读哪个文档?

RabbitMQ使用自定义数据库存储消息,数据库通常位于以下位置:

/var/lib/rabbitmq/mnesia/rabbit@hostname/queues
从版本3.5.5开始,RabbitMQ引入了新的信贷流

让我们看看RabbitMQ队列如何存储消息。当 消息进入队列时,队列需要确定消息 是否应该持久化。如果必须保留该消息,则 RabbitMQ将立即这样做[3]。现在即使消息被持久化了 对于磁盘,这并不意味着消息已从RAM中删除,因为 RabbitMQ在RAM中保留消息缓存,以便在需要时快速访问 向消费者传递信息。每当我们谈论寻呼时 将消息发送到磁盘时,我们讨论的是RabbitMQ在 必须将消息从此缓存发送到文件系统

这篇博文很详细

我还建议阅读有关惰性队列的内容: 和

惰性队列这种新类型的队列通过发送 直接传递到文件系统,只需加载 当消费者到达队列时,RAM中的消息。优化磁盘 读取消息并批量加载


是否可以使用MSMQ来保存消息?@Marco你是说“Microsoft消息队列”吗?一般来说(现在),RabbitMQ不支持外部数据库来存储消息这就是我的意思,公平地说,我不确定它是否会支持它。谢谢@Gabriele