RabbitMQ 背后的 Erlang 一些基本信息

·

1 min read

众所周知,RabbitMQ 底层的开发语言是 Erlang,所以通过一些简单的 Erlang 操作能获得一些 RabbitMQ 的底层信息。

通过新的 Node 节点来进行连接和调用

通过命令erl -sname test ,我们先新建了一个节点。

new-erlang-node

接下来就是通过命令 net_adm:names(). 来查看当前机器上的 Erlang 节点。

exist-erlang-nodes

然后通过命令 net_adm:ping('rabbit@Asia'). 来连接上 RabbitMQ 的节点。

connect-to-erlang-node

接下来就可以通过命令 rpc:call(<node_name>, <command>, <function_name>, <parameters>) 的形式来执行命令在连接上的节点上。

run-command-on-node

通过 CLI 直接连接到 RabbitMQ 的节点

通过传入 remsh 参数来启动 Erlang 程序。

remsh-connect-to-erlang-node

这里你会发现,我们已经直接连接到了 RabbitMQ 的节点了。接下来就让我们来查询一下 RabbitMQ 的底层数据库 Mnesia 的一些表信息。

题外话,现在如果你再次调用 nodes(). 命令,你会发现我们已经连接到了 RabbitMQ 集群上的其他 Erlang 节点了。

cluster-nodes

这是在 RabbitMQ 的 Management 中获取到的信息。

node-info-in-management

根据先前的远程调用,我们已经可以获知 RabbitMQ 会创建一些数据表到数据库中。

some-tables-in-mnesia

现在让我们来进行一个查询,看看在 rabbit_user 表中有那些数据。

query-table-example

一些有用的 Mnesia 命令

命令:mnesia:system_info(tables).

mnesia-system-info-tables

命令:mnesia:schema('rabbit_user').

mnesia-schema