RabbitMQ如何实际存储消息?

时间:2016-07-18 19:21:12

标签: rabbitmq

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

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

我想知道关于这些内幕的内容。不幸的是,其主页上的官方文档没有公开内部细节。

我应该阅读哪个文件?

1 个答案:

答案 0 :(得分:16)

RabbitMQ使用自定义DB来存储消息,db通常位于此处:

/var/lib/rabbitmq/mnesia/rabbit@hostname/queues

从版本3.5.5开始,RabbitMQ推出了新的新信用流程 https://www.rabbitmq.com/blog/2015/10/06/new-credit-flow-settings-on-rabbitmq-3-5-5/

  

让我们来看看RabbitMQ队列如何存储消息。当一个   消息进入队列,队列需要确定消息是否存在   应该坚持与否。如果必须保留消息,那么   RabbitMQ将立即这样做[3]。现在即使邮件仍然存在   到磁盘,这并不意味着消息已从RAM中删除,因为   RabbitMQ在RAM中保留消息缓存,以便在以后快速访问   向消费者传递信息。每当我们谈论分页时   消息传递到磁盘,我们正在谈论RabbitMQ做什么   必须将此缓存中的消息发送到文件系统。

这篇博文足够详细。

我还建议阅读有关延迟队列的信息: https://www.rabbitmq.com/lazy-queues.htmlhttps://www.rabbitmq.com/blog/2015/12/28/whats-new-in-rabbitmq-3-6-0/

  

延迟队列这种新类型的队列通过发送每条消息来工作   直接传递给文件系统,只加载   消费者到达队列时RAM中的消息。优化磁盘   读取消息是批量加载的。