我们可以通过网页来对RabbitMQ进行管理:
如果安装了rabbitmq_management
插件,即安装了 RabbitMQ 中的 Web 管理客户端,那么我们就可以通过 REST API 来进行 RabbitMQ 的管理。
如果项目使用了如 Granglia 或者 Graphite 之类的图形工具,我们想抓取当前 RabbitMQ 上消息消费/累积的情况,就可以使用使用 REST API 去查询这些信息并将查询结果传输到新的图形工具上,同时,由于 REST API 就是 HTTP 请求,所以支持的客户端也是多样化,只要能发送 HTTP 请求,就能用,特别方便
1. REST API
REST(Representational State Transfer)是一种 Web 软件架构风格,它是一种风格,而不是标准,匹配或兼容这种架构风格的的网络服务称为 REST 服务。
REST 服务简洁并且有层次,它通常基于 HTTP、URI、XML 以及 HTML 这些现有的广泛流行的协议和标准。在 REST 中,资源是由 URI 来指定,对资源的增删改查操作可以通过 HTTP 协议提供的 GET、POST、PUT、DELETE 等方法实现。
使用 REST 可以更高效的利用缓存来提高响应速度,同时 REST 中的通信会话状态由客户端来维护,这可以让不同的服务器处理一系列请求中的不同请求,进而提高服务器的扩展性。
在前后端分离项目中,一个设计良好的 Web 软件架构必然要满足 REST 风格。
2. 开启 Web 管理页面
如何开启 Web 管理页面,总的来说有两种方式开启 Web 管理页面:
- 安装 RabbitMQ 的时候,直接选择
rabbitmq:3-management
镜像,安装命令如下:
docker run -d --rm --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management
- 这样安装好的 RabbitMQ 就可以直接使用 Web 管理页面了。
- 安装的时候就选择正常的普通镜像
rabbitmq:3
,安装命令如下:
docker run -d --hostname my-rabbit --name some-rabbit2 -p 5673:5672 -p 25672:15672 rabbitmq:3
安装好之后,需要我们进入到容器中,然后手动开启 Web 管理插件,命令如下:
docker exec -it some-rabbit2 /bin/bash rabbitmq-plugins enable rabbitmq_management
第一条命令是进入到容器中,第二条命令开启 Web 管理插件,执行结果如下:
通过以上两种方式任意一种把 Web 管理页面打开,然后我们就可以使用 REST API 了。
3. 实践
可以通过 CURL 工具来发送请求,也可以通过 POSTMAN 来发送请求。
3.1 查看队列统计数据
想查看虚拟主机 myvh 下 hello-queue 队列的数据统计,可以通过如下方式:
curl -i -u javaboy:123 http://localhost:15672/api/queues/myvh/hello-queue
-i
表示显示响应头信息。
最终执行结果如下:
可以看到,返回的信息有响应头,也有 JSON,不过返回的 JSON 没有格式化,看起来有点难受,如果返回的数据只有 JSON 而不包含响应头,那么我们可以使用 python 来完成数据的格式化,如下:
可以看到,此时返回的数据就格式化了。
也可以使用 POSTMAN 来发送这个请求,方式如下:
3.2 创建队列
在 /myvh 虚拟主机下创建一个名为 javaboy-queue 的队列,使用 CURL 请求方式如下:
curl -i -u javaboy:123 -XPUT -H "Content-Type:application/json" -d '{"auto_delete":false,"durable":true}' http://localhost:15672/api/queues/myvh/javaboy-queue
注意请求方式是 PUT 请求,请求参数是 JSON 形式,JSON 里边有两个东西,一个
auto_delete
是说如果该队列没有任何消费者订阅的话,该队列是否会被自动删除(如果是一些临时队列,则该属性可以设置为 true);另外一个durable
则是说队列是否持久化(持久化的队列,在 RabbitMQ 重启之后,队列依然存在),如果大家用 Java 代码创建过队列,这两个参数很好理解,因为我们用 Java 代码创建队列的时候这两个参数也会经常用到。
也可以用 POSTMAN 来发送请求:
返回 201 Created
表示队列创建成功。
注意在 Authorization 选项卡中设置用户名/密码: