RabbitMQ详解——服务端存储机制(二)
消息的存储
存储介质
rabbitmq内部有两种存储
元数据存储在基于mnesia的数据库中
运行时数据存储在etc中
mnesia
mnesia介绍Mnesia是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的Erlang应用,是构建电信应用的控制系统平台开放式电信平台(OTP)的一部分
RabbitMQ中的mnesia存储路径及schema

#指定mnesia的schema目录(注意一定要加 -setcookie并且需要和你想要查看的erlang node实例的cookie保持一致,否则执行mnesia及ets的时候都会报rpcbad 或者表没有权限)
erl -sname node1 -setcookie rabbitcookie -mnesia dir '"/var/lib/rabbitmq/mnesia/rabbit@rabbit1"'
#启动mnesia
mnesia:start().
#查看具体表的字段信息
mnesia:table_info(rabbit_queue,all).
未设置cookie的报错

##查看mnesia表的结构
mnesia:info().

##查看rabbit_queue表的基本信息
mnesia:table_info(rabbit_queue,all).

##读出表的所有key列表
mnesia:dirty_all_keys(rabbit_queue).

##根据key读表记录,取上文的key值
mnesia:dirty_read(rabbit_queue, {resource,<<"/">>,queue,<<"test123">>}).

ets数据查询
定义
Erlang 项式存储 (Erlang Term Storage,通常简称 ETS) 是 OTP 中内置的一个功能强大的存储引擎,我们在 Elixir 中也可以很方便地使用。本文将介绍如何使用 ETS 以及如何在我们的应用中使用它。
可以通过安装rabbitmq-top 插件查看占用内存较多的etc key
rabbitmq-plugins enable rabbitmq_top

也可以通过erl中的etc命令进行查看
rpc:call('rabbit@rabbit1',ets,tab2list,[rabbit_msg_store_cur_file]).
