服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - 编程技术 - 另类玩法!使用 Rest API 操作 RabbitMQ

另类玩法!使用 Rest API 操作 RabbitMQ

2021-12-02 22:55江南一点雨 编程技术

如果我们安装了 rabbitmq_management 插件,即安装了 RabbitMQ 中的 Web 管理客户端,那么我们就可以通过 REST API 来进行 RabbitMQ 的管理。

另类玩法!使用 Rest API 操作 RabbitMQ

  • 1. REST API
  • 2. 开启 Web 管理页面
  • 3. 实践
    • 3.1 查看队列统计数据
    • 3.2 创建队列
    • 3.3 查看当前连接信息
    • 3.4 查看当前用户信息
    • 3.5 创建一个用户
    • 3.6 为新用户设置 vhost
  • 4. 小结

RabbitMQ 还可以这么玩!

关于 RabbitMQ 的管理,我们可以通过网页来进行,在松哥前面的文章中也和小伙伴们做了相关的介绍了:

RabbitMQ 管理页面该如何使用

不过呢,如果我们安装了 rabbitmq_management 插件,即安装了 RabbitMQ 中的 Web 管理客户端,那么我们就可以通过 REST API 来进行 RabbitMQ 的管理。

可能有小伙伴会问,这有什么用?

如果我们的项目使用了如 Granglia 或者 Graphite 之类的图形工具,我们想抓取当前 RabbitMQ 上消息消费/累积的情况,就可以使用使用 REST API 去查询这些信息并将查询结果传输到新的图形工具上,同时,由于 REST API 就是 HTTP 请求,所以支持的客户端也是多样化,只要能发送 HTTP 请求,就能用,是不是特别方便?

1. REST API

可能有小伙伴还不懂什么是 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 镜像,安装命令如下:

  1. docker run -d --rm --hostname my-rabbit --name some-rabbit -p 15672:15672 -p 5672:5672 rabbitmq:3-management

这样安装好的 RabbitMQ 就可以直接使用 Web 管理页面了。

安装的时候就选择正常的普通镜像 rabbitmq:3,安装命令如下:

  1. docker run -d --hostname my-rabbit --name some-rabbit2 -p 5673:5672 -p 25672:15672 rabbitmq:3

这个安装好之后,需要我们进入到容器中,然后手动开启 Web 管理插件,命令如下:

  1. docker exec -it some-rabbit2 /bin/bash
  2. rabbitmq-plugins enable rabbitmq_management

第一条命令是进入到容器中,第二条命令开启 Web 管理插件,执行结果如下:

另类玩法!使用 Rest API 操作 RabbitMQ

通过以上两种方式任意一种把 Web 管理页面打开,然后我们就可以使用 REST API 了。

3. 实践

接下来我们就来体验几个常见的 REST API 操作。

我们可以通过 CURL 工具来发送请求,也可以通过 POSTMAN 来发送请求,两者皆可,选择自己喜欢的即可。松哥这里两种方式都和大家演示一下。

3.1 查看队列统计数据

例如我们想查看虚拟主机 myvh 下 hello-queue 队列的数据统计,我们可以通过如下方式来查看:

  1. curl -i -u javaboy:123 http://localhost:15672/api/queues/myvh/hello-queue

-i 表示显示响应头信息。

最终执行结果如下:

另类玩法!使用 Rest API 操作 RabbitMQ

可以看到,返回的信息有响应头,也有 JSON,不过返回的 JSON 没有格式化,看起来有点难受,如果返回的数据只有 JSON 而不包含响应头,那么我们可以使用 python 来完成数据的格式化,如下:

另类玩法!使用 Rest API 操作 RabbitMQ

可以看到,此时返回的数据就格式化了。

当然我们也可以使用 POSTMAN 来发送这个请求,方式如下:

另类玩法!使用 Rest API 操作 RabbitMQ

注意选择认证方式为 Basic Auth,同时设置正确的用户名密码。

POSTMAN 请求还是方便很多。

3.2 创建队列

在 /myvh 虚拟主机下创建一个名为 javaboy-queue 的队列,使用 CURL 请求方式如下:

  1. 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 来发送请求:

另类玩法!使用 Rest API 操作 RabbitMQ

返回 201 Created 表示队列创建成功。

不过要注意在 Authorization 选项卡中设置用户名/密码:

另类玩法!使用 Rest API 操作 RabbitMQ

3.3 查看当前连接信息

我们可以通过如下请求查看当前连接信息:

请求如下:

  1. curl -i -u javaboy:123 http://localhost:15672/api/connections

另类玩法!使用 Rest API 操作 RabbitMQ

POSTMAN 查看方式如下:

另类玩法!使用 Rest API 操作 RabbitMQ

3.4 查看当前用户信息

  1. curl -i -u javaboy:123 http://localhost:15672/api/users

另类玩法!使用 Rest API 操作 RabbitMQ

POSTMAN 查看信息如下:

另类玩法!使用 Rest API 操作 RabbitMQ

3.5 创建一个用户

创建一个名为 zhangsan,密码是 123 ,角色是 administrator 的用户。

CURL:

  1. curl -i -u javaboy:123 -H "{Content-Type:application/json}" -d '{"password":"123","tags":"administrator"}' -XPUT http://localhost:15672/api/users/zhangsan

POSTMAN:

另类玩法!使用 Rest API 操作 RabbitMQ

3.6 为新用户设置 vhost

将名为 zhangsan 的用户设置到名为 myvh 的 vhost 下:

  1. curl -i -u javaboy:123 -H "{Content-Type:application/json}" -d '{"configure":".*","write":".*","read":".*"}' -XPUT http://localhost:15672/api/permissions/myvh/zhangsan

参数是具体的权限信息:

另类玩法!使用 Rest API 操作 RabbitMQ

POSTMAN 请求方式如下:

另类玩法!使用 Rest API 操作 RabbitMQ

好啦,松哥这里随便给大家举几个例子,其他 API 的用法,小伙伴们可以打开 RabbitMQ 的管理页面,点击下方的 HTTP API 按钮,里边有一个完整的文档:

另类玩法!使用 Rest API 操作 RabbitMQ

4. 小结

感兴趣的小伙伴可以去试试哦~

原文链接:https://mp.weixin.qq.com/s/ULKrD4IqSHWm5HX4xEnQHw

延伸 · 阅读

精彩推荐
  • 编程技术让开发效率倍增的 VS Code 插件

    让开发效率倍增的 VS Code 插件

    今天来分享一些提升开发效率的实用 VS Code 插件!Better Comments 扩展可以帮助我们在代码中创建更人性化的注释,有不同形式和颜色的注释供我们选择。 ...

    前端充电宝7132022-04-21
  • 编程技术从Context源码实现谈React性能优化

    从Context源码实现谈React性能优化

    这篇文章主要介绍Context的实现原理,源码层面掌握React组件的render时机,从而写出高性能的React组件,源码层面了解shouldComponentUpdate、React.memo、PureComponen...

    魔术师卡颂5312020-12-20
  • 编程技术真正聪明的程序员,总有办法不加班

    真正聪明的程序员,总有办法不加班

    工作效率提升了,就可以少加班了,聪明的程序员,总会有一堆可以提升编码效率的工具?当一种工具满足不了工作需求,就去探索新的,今天纬小创就给...

    今日头条12482021-03-04
  • 编程技术AIOps,SRE工程师手中的利器

    AIOps,SRE工程师手中的利器

    AIOps开始成为一种极为重要的站点可靠性工程工具。它能够高效吸纳观察数据、参与数据以及来自第三方工具的数据,判断系统运行状态并保证其处于最佳...

    至顶网5972021-03-08
  • 编程技术简单、好懂的Svelte实现原理

    简单、好懂的Svelte实现原理

    本文会围绕一张流程图和两个Demo讲解,正确的食用方式是用电脑打开本文,跟着流程图、Demo一边看、一边敲、一边学...

    魔术师卡颂4822021-11-10
  • 编程技术2021年值得关注的React PDF 库

    2021年值得关注的React PDF 库

    今天,许多网络应用程序为其用户提供内置的PDF浏览选项。然而,选择一个并不容易,因为它们的功能远远超过显示PDF。在这篇文章中,我将评估5个React的...

    TianTianUp5232021-06-21
  • 编程技术Delphi - Indy idMessage和idSMTP实现邮件的发送

    Delphi - Indy idMessage和idSMTP实现邮件的发送

    这篇文章主要介绍了Delphi - Indy idMessage和idSMTP实现邮件的发送,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下...

    JJ_JeremyWu6592020-09-22
  • 编程技术用户态 Tcpdump 如何实现抓到内核网络包的?

    用户态 Tcpdump 如何实现抓到内核网络包的?

    在网络包的发送和接收过程中,绝大部分的工作都是在内核态完成的。那么问题来了,我们常用的运行在用户态的程序 tcpdump 是那如何实现抓到内核态的包...

    开发内功修炼11612021-09-08