当前位置: 首页 > 后端技术 > Java

另类玩法!使用RESTAPI操作RabbitMQ

时间:2023-04-01 16:11:24 Java

@[toc]RabbitMQ也可以这样玩!关于RabbitMQ的管理,我们可以通过网页来进行。在松哥之前的文章中也给小伙伴们介绍过:RabbitMQ管理页面的使用方法。但是,如果我们安装了rabbitmq_management插件,它就会在RabbitMQ中安装Web管理客户端,那么我们就可以通过RESTAPI来管理RabbitMQ了。可能有朋友会问,这个有什么用?如果我们的项目使用了Granglia或者Graphite等图形化工具,我们想要抓取当前在RabbitMQ上的消息消耗/累积情况,我们可以使用RESTAPI来查询这些信息,并将查询结果传输到新的图形化工具中同时,由于RESTAPI是HTTP请求,所以支持的客户端也是多样化的。只要能够发送HTTP请求,就可以使用。是不是很方便?一、RESTAPI可能有小伙伴不知道什么是RESTAPI。这里简单科普一下:REST(RepresentationalStateTransfer)是Web软件架构的一种风格。它是一种风格,而不是一种标准,匹配或兼容这种架构风格的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镜像,安装命令如下:dockerrun-d--rm--hostnamemy-rabbit--namesome-rabbit-p15672:15672-p5672:5672rabbitmq:3-management这样安装好的RabbitMQ就可以直接使用web管理页面了。安装时选择正常的普通镜像rabbitmq:3,安装命令如下:dockerrun-d--hostnamemy-rabbit--namesome-rabbit2-p5673:5672-p25672:15672rabbitmq:3后这个安装好了,我们需要进入容器,然后手动开启web管理插件,命令如下:dockerexec-itsome-rabbit2/bin/bashrabbitmq-pluginsenablerabbitmq_management第一个命令是输入container,第二条打开web管理插件的命令,执行结果如下:通过以上两种方式任意打开web管理页面,即可使用RESTAPI。3.实践接下来,我们来体验几个常见的RESTAPI操作。我们可以通过CURL工具发送请求,也可以通过POSTMAN发送请求,选择你喜欢的即可。宋兄在这里就来演示一下这两种方法。3.1查看队列统计例如我们要查看虚拟主机myvh下hello-queue队列的数据统计,可以通过以下方式查看:curl-i-ujavaboy:123http://localhost:15672/api/queues/myvh/hello-queue-i表示显示响应头信息。最终执行结果如下:可以看到,返回的信息包括响应头和JSON,但是返回的JSON没有格式化,看起来有点不舒服。如果返回的数据只包含JSON,不包含响应头,那么我们可以使用python来完成数据的格式化,如下所示:可以看到,此时返回的数据已经被格式化了。当然我们也可以使用POSTMAN来发送这个请求,方法如下:注意认证方式选择为BasicAuth,同时设置正确的用户名和密码。POSTMAN请求还是方便很多。3.2创建队列在/myvh虚拟主机下创建一个名为javaboy-queue的队列,使用CURL请求方式如下:curl-i-ujavaboy: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表示队列是否持久化(persistent队列在RabbitMQ重启后仍然存在),如果你用Java代码创建过队列,这两个参数很好理解,因为这两个参数我们在创建一个队列的时候经常用到使用Java代码排队。当然我们也可以使用POSTMAN发送请求:返回201Created表示队列创建成功。但要注意在Authorization选项卡中设置用户名/密码:3.3查看当前连接信息我们可以通过如下请求查看当前连接信息:请求如下:curl-i-ujavaboy:123http://localhost:15672/api/ConnectionsPOSTMAN查看方法如下:3.4查看当前用户信息curl-i-ujavaboy:123http://localhost:15672/api/usersPOSTMAN查看信息如下:3.5创建用户创建用户名为zhangsan,密码为123,角色为administrator用户。CURL:curl-i-ujavaboy:123-H"{Content-Type:application/json}"-d'{"password":"123","tags":"administrator"}'-XPUThttp://localhost:15672/api/users/zhangsanPOSTMAN:3.6为新用户设置虚拟主机将名为zhangsan的用户设置为名为myvh的虚拟主机:curl-i-ujavaboy:123-H"{Content-Type:application/json}"-d'{"configure":".*","write":".*","re??ad":".*"}'-XPUThttp://localhost:15672/api/permissions/myvh/zhangsan参数为具体的权限信息:POSTMAN请求方法如下:好了,宋哥在这里给大家举几个例子。其他API的使用,小伙伴们可以打开RabbitMQ的管理页面,点击下方的HTTPAPI按钮,可以看到里面有完整的文档:4.总结有兴趣的小伙伴可以试试~