1.通过 rabbitmqctl 脚本
rabbitmqctl 是 shell 脚本,其通过 exec 调用了 erl 程序。会间接调用到如下两个 shell 脚本:
- rabbitmq-env
- rabbitmq-defaults
在使用该脚本时允许用户定制的环境变量为:
- RABBITMQ_NODENAME 默认值 ${NODENAME}
- RABBITMQ_CTL_ERL_ARGS 默认值 ${CTL_ERL_ARGS}
下面分别看下这几个脚本都干了哪些事情。
【rabbitmqctl】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
|
【rabbitmq-env】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 |
|
【 rabbitmq-defaults 】
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|
2. 通过 RabbitMQ Management plugin
首先想到的问题是:为什么有了 rabbitmqctl 还要 RabbitMQ Management plugin ?
- 原因一,若想通过 rabbitmqctl 来对 rabbitmq server 进行操作,要求必须要有 Erlang 运行环境、必须拥有和目标 rabbitmq server 使用的相同 erlang cookie 文件。
- 原因二,一旦满足了上述条件,那么该访问者将拥有对当前 rabbitmq server 为所欲为的能力,非常危险。
- 原因三,不是所有人都喜欢敲、以及会敲 CLI 命令。
- 原因四,难于与其他编程语言或工具进行集成。
RabbitMQ Management plugin 提供了如下几种入口:
- Web interface -- 通过鼠标点击就可以查看各种信息
- REST interface -- 通过 HTTP URI 实现对各种功能的访问
- CLI interface -- 通过 rabbitmqadmin 脚本访问 (Python2.x)
与《Rabbitmq in Action》中的说明进行对照:
- Management: Web UI
- Management: HTTP API
- Management: Command Line Tool
其中,
- WEB UI 提供了在 rabbitmq server 上的可视化操作;
- REST API 提供了一种与其他语言和工具集成的方式。返回的结构均以 JSON 格式提供,故需要支持 JSON 解析;需要支持 HTTP basic authentication ;需要手动构造完整的 HTTP request 。支持对返回结果的排序、显示过滤,以及获取历史数据。(参考 http://youripaddir:15672/api/)
- CLI interface 优于 REST-based API 的地方是不需要构建 request 中的全部内容,提供了优雅的格式化的输出。rabbitmqadmin 已经实现了对 REST API 的封装,提供了更加简洁的调用接口,能够对 rabbitmq server 进行管理和监控。
官网原文如下介绍该工具:rabbitmqadmin 提供了 Web UI 上所具有的全部功能,且更易于在脚本中使用。rabbitmqadmin 是一个特化的 HTTP 客户端,但如果你打算在自己的应用程序中调用 rabbitmqadmin ,那么还是建议你采用直接访问 HTTP API 的方式 。 另外, rabb itmqadmin 一般会在增加可执行权限后放到 /usr/local/bin 中。