写点什么

RabbitMQ 详解——服务端存储机制(二)

发布于: 1 小时前
RabbitMQ详解——服务端存储机制(二)

消息的存储

存储介质

rabbitmq 内部有两种存储

  • 元数据存储在基于 mnesia 的数据库中

  • 运行时数据存储在 etc 中

mnesia

mnesia 介绍 Mnesia 是一个分布式数据库管理系统(DBMS),适合于电信和其它需要持续运行和具备软实时特性的 Erlang 应用,是构建电信应用的控制系统平台开放式电信平台(OTP)的一部分


mnesia使用介绍ERLANG


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"'#启动mnesiamnesia: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 以及如何在我们的应用中使用它。Erlang 项式存储 (ETS)


可以通过安装 rabbitmq-top 插件查看占用内存较多的 etc key


rabbitmq-plugins enable rabbitmq_top
复制代码



也可以通过 erl 中的 etc 命令进行查看


rpc:call('rabbit@rabbit1',ets,tab2list,[rabbit_msg_store_cur_file]).
复制代码



发布于: 1 小时前阅读数: 8
用户头像

还未添加个人签名 2018.05.03 加入

十年开发老兵,多年搜索及推荐领域技术和业务积累目前主要研究低代码平台设计及开发模式,关注三高架构设计方案及系统实现,微服务治理实践及DDD领域驱动设计方案

评论

发布
暂无评论
RabbitMQ详解——服务端存储机制(二)