RabbitMQ以持久模式存储时,磁盘中的数据结构消息是什么样的?

问题描述

我正在使用版本为 rabbitmq:3-management 的 Rabbitmq docker 图像。

docker run -d --hostname my-rabbit --name ecomm-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management

我很好奇它在队列中存储 msg 的方式(如果持久数据在 disk 而不是 RAM)。

我已阅读 this post 并且接受的答案是:

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

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

然而,当我导航到这个文件夹时,我没有看到。

我的问题是: 存储 DB 文件文件夹/文件是什么?类型或结构是什么样的?

解决方法

要回答第一个问题,请查看 RABBITMQ_MNESIA_DIR here 部分。以下是默认值,除非明确设置 RABBITMQ_MNESIA_DIR

  • 通用 UNIX 包:$RABBITMQ_HOME/var/lib/rabbitmq/mnesia
  • Ubuntu 和 Debian 软件包:/var/lib/rabbitmq/mnesia/
  • 每千次展示收入:/var/lib/rabbitmq/plugins
  • MacOS (Homebrew):${install_prefix}/var/lib/rabbitmq/mnesia,Homebrew 前缀通常是 /usr/local
  • Windows:%APPDATA%\RabbitMQ

您将看到一些 .dcd.dcl 文件。这意味着我们有一个 mnesia database。为了验证这一点,

> erl -mnesia dir '"/var/lib/rabbitmq/mnesia/rabbit@YOUR_CONTAINER_ID"'
1> mnesia:start().
ok
2> mnesia:system_info().
# here you will see tables like `rabbit_durable_exchange`