RabbitMQ CLI 管理工具 rabbitmqadmin(管理和监控)

插个广告,公司最近在招“.NET”开发(杭州),如果你现在还从事 .NET 开发(想用 .NET Core,但被公司不认可),想转 JAVA 开发(但又没有工作经验,惧怕面试),想用微服务架构重构(面对现有庞大的单体应用程序,有心无力),那么请关注右侧的公众号私信我,或许我可以帮到你一些~~~

一般情况下,我们会使用 rabbitmq_management 插件,通过 Web UI 的方式来监控和操作 RabbitMQ(端口 15672),但有时候命令的方式会更加方便一些,RabbitMQ 提供了 CLI 管理工具 rabbitmqadmin ,其实就是基于 RabbitMQ 的 HTTP API,用 Python 写的一个脚本。

另外,除了 rabbitmqadmin ,有个人也写了一个 rabbitmq-dump-queue 脚本,用于抓取 Queue 队列,用文件进行存储,但使用下来,感觉还是官方的 rabbitmqadmin 比较好些。

rabbitmqadmin 提供了下面功能:

  • 列出 exchanges, queues, bindings, vhosts, users, permissions, connections and channels。
  • 创建和删除 exchanges, queues, bindings, vhosts, users and permissions。
  • 发布和获取消息,以及消息详情。
  • 关闭连接和清空队列。
  • 导入导出配置。

使用 rabbitmqadmin 的时候,我们需要理解 RabbitMQ 的基本概念,先回顾一下:

RabbitMQ 概念:

概念 详解
Exchange 消息交换机,它指定消息按什么规则,路由到哪个队列
Queue 消息队列,每个消息都会被投入到一个或多个队列
Binding 绑定,它的作用就是把 exchange 和 queue 按照路由规则绑定起来
Routing Key 路由关键字,exchange 根据这个关键字进行消息投递
Vhost 虚拟主机,可以开设多个 vhost,用作不同用户的权限分离
Producer 消息生产者,就是投递消息的程序
Consumer 消息消费者,就是接受消息的程序
Channel 消息通道,在客户端的每个连接里,可建立多个 channel,每个 channel 代表一个会话任务

RabbitMQ 流程:

RabbitMQ 投递过程:

  • 1. 客户端连接到消息队列服务器,打开一个 channel。
  • 2. 客户端声明一个 exchange,并设置相关属性。
  • 3. 客户端声明一个 queue,并设置相关属性。
  • 4. 客户端使用 routing key,在 exchange 和 queue 之间建立好绑定关系。
  • 5. 客户端投递消息到 exchange。
  • 6. 客户端从指定的 queue 中消费信息。

不理解?没关系,看下面。



接下来,我们就用 rabbitmqadmin ,来演示上面 RabbitMQ 投递过程。

如果我们安装了rabbitmq_management插件,可以打开http://node1:15672/cli/页面,下载 rabbitmqadmin。

或者直接进行下载:

[[email protected] ~]# wget http://node1:15672/cli/rabbitmqadmin

然后移到PATH目录,并赋予权限:

[[email protected] ~]# mv rabbitmqadmin /usr/local/bin
[[email protected] ~]# sudo chmod 777 /usr/local/bin/rabbitmqadmin

查看 rabbitmqadmin 命令:

[[email protected] ~]# rabbitmqadmin -help
Usage
=====
  rabbitmqadmin [options] subcommand
...

创建一个test队列:

[[email protected] ~]# rabbitmqadmin declare queue name=test durable=true
queue declared
[[email protected] ~]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 0        |
+------+----------+

需要注意:durable=true表示持久化,如果没有创建 Exchange,RabbitMQ 会使用默认的 Exchange,以及创建一个 Binding,这也就是为什么下面发布消息,可以成功的原因。

发布一条消息:

[[email protected] ~]# rabbitmqadmin publish routing_key=test payload="hello world"
Message published
[[email protected] ~]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 1        |
+------+----------+

消费一条消息(查看消息内容):

[[email protected] ~]# rabbitmqadmin get queue=test requeue=true
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count |   payload   | payload_bytes | payload_encoding | properties | redelivered |
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
| test        |          | 0             | hello world | 11            | string           |            | False       |
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
[[email protected] ~]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 1        |
+------+----------+
[[email protected] ~]# rabbitmqadmin get queue=test requeue=false
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count |   payload   | payload_bytes | payload_encoding | properties | redelivered |
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
| test        |          | 0             | hello world | 11            | string           |            | True        |
+-------------+----------+---------------+-------------+---------------+------------------+------------+-------------+
[[email protected] ~]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 0        |
+------+----------+

需要注意:requeue=true表示查看队列,不消费;requeue=false表示查看队列,进行消费。

我们查看下上面创建队列后,默认创建的 Binding:

[[email protected] ~]# rabbitmqadmin list bindings
+--------+-------------+-------------+
| source | destination | routing_key |
+--------+-------------+-------------+
|        | test        | test        |
+--------+-------------+-------------+

可以看到,使用的默认 Exchange 是空字符串(系统中的第一个 Exchange,Binding 中的 source 部分),并且这个默认的 Exchange 是direct类型(也就是一对一模式),这种隐式调用确保了消息准确投递。

另外,再说一下 Binding 中的三个概念:

  • Source:源头的意思,其实就是 Exchange。
  • destination:目的地的意思,其实就是 Queue。
  • routing_key:路由键的规则,用于 Queue 匹配(比如test.#)。

那下面我们就手动创建一下 Exchange:

[[email protected] ~]# rabbitmqadmin declare exchange name=my.topic type=topic
exchange declared
[[email protected] ~]# rabbitmqadmin list exchanges
+--------------------+---------+
|        name        |  type   |
+--------------------+---------+
|                    | direct  |
| amq.direct         | direct  |
| amq.fanout         | fanout  |
| amq.headers        | headers |
| amq.match          | headers |
| amq.rabbitmq.log   | topic   |
| amq.rabbitmq.trace | topic   |
| amq.topic          | topic   |
| my.topic           | topic   |
+--------------------+---------+

需要注意:这边我们只创建了一个 Exchange,类型为 Topic,和之前创建的test队列,目前没有任何关系。

然后再创建一个 Binding:

[[email protected] ~]# rabbitmqadmin declare binding source=my.topic destination=test routing_key=my.#
binding declared
[[email protected] ~]# rabbitmqadmin list bindings
+----------+-------------+-------------+
|  source  | destination | routing_key |
+----------+-------------+-------------+
|          | test        | test        |
| my.topic | test        | my.#        |
+----------+-------------+-------------+

需要注意:我们上面创建的 Binding(最后那个),就是将名称为my.topic的 Exchange 和名称为test的 Queue 关联起来,并且设置的routing_key规则为my.#

下面我们发布两条消息:

[[email protected] ~]# rabbitmqadmin publish routing_key=my.test exchange=my.topic  payload="hello world by my.test"
Message published
[[email protected] ~]# rabbitmqadmin publish routing_key=my.test.test exchange=my.topic  payload="hello world by my.test.test"
Message published
[[email protected] ~]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 2        |
+------+----------+

需要注意,发布的两条消息都指定了my.topic的 Exchange,但消息的routing_key不同,但都成功发布到test队列了,原因是my.testmy.test.test都符合my.#路由规则。

下面,我们对两条消息进行消费:

[[email protected] ~]# rabbitmqadmin get queue=test requeue=false
+-------------+----------+---------------+------------------------+---------------+------------------+------------+-------------+
| routing_key | exchange | message_count |        payload         | payload_bytes | payload_encoding | properties | redelivered |
+-------------+----------+---------------+------------------------+---------------+------------------+------------+-------------+
| my.test     | my.topic | 1             | hello world by my.test | 22            | string           |            | False       |
+-------------+----------+---------------+------------------------+---------------+------------------+------------+-------------+
[[email protected] ~]# rabbitmqadmin get queue=test requeue=false
+--------------+----------+---------------+-----------------------------+---------------+------------------+------------+-------------+
| routing_key  | exchange | message_count |           payload           | payload_bytes | payload_encoding | properties | redelivered |
+--------------+----------+---------------+-----------------------------+---------------+------------------+------------+-------------+
| my.test.test | my.topic | 0             | hello world by my.test.test | 27            | string           |            | False       |
+--------------+----------+---------------+-----------------------------+---------------+------------------+------------+-------------+
[[email protected] ~]# rabbitmqadmin list queues
+------+----------+
| name | messages |
+------+----------+
| test | 0        |
+------+----------+

rabbitmqadmin 测试到这边,你应该就体会到了 RabbitMQ 的投递过程了吧,我们再对之前的投递过程完善下:

  • 1. 声明一个 Queue,和谁都没有关系(只有名称和持久化配置)。
  • 2. 声明一个 Exchange,和谁都没有关系(只有名称和 Exchange Type 配置)。
  • 3. 声明一个 Binding,通过 source 和 destination,将 Queue 和 Exchange 关联起来,并通过 routing_key,设置发布消息的路由规则。
  • 4. 发布一个消息,需要指定一个 Exchange,以及本身的路由名称。
  • 5. 消费队列中的消息,需要指定一个 Queue。

rabbitmqadmin 命令汇总:

命令 解释
rabbitmqadmin list users 查看所有用户 User
rabbitmqadmin list users name 查看所有用户名 Username
rabbitmqadmin list users tags 查看所有用户角色
rabbitmqadmin list vhosts 查看所有虚拟主机
rabbitmqadmin list connections 查看所有连接
rabbitmqadmin list exchanges 查看所有路由 Exchange
rabbitmqadmin list bindings 查看所有路由与队列的关系绑定 Binding
rabbitmqadmin list permissions 查看所有角色的权限 Permission
rabbitmqadmin list channels 查看所有通道 Channel
rabbitmqadmin list consumers 查看所有消费者 Consumer
rabbitmqadmin list queues 查看所有消息队列 Queue
rabbitmqadmin list nodes 查看所有节点 Node
rabbitmqadmin show overview 概览 Overview
rabbitmqadmin list bindings source destination_type destination properties_key 查看所有路由与队列的关系绑定的详细信息 Binding
rabbitmqadmin declare queue name=test durable=true 定义一个队列queue,durable=true代表持久化打开。
rabbitmqadmin declare exchange name=my.fanout type=fanout 定义一个Fanout路由
rabbitmqadmin declare exchange name=my.direct type=direct 定义一个Direct路由
rabbitmqadmin declare exchange name=my.topic type=topic 定义一个Topic路由
rabbitmqadmin declare binding source=my.fanout destination=test routing_key=first 定义 binding
rabbitmqadmin publish routing_key=test payload="hello world" 发布一条消息
rabbitmqadmin publish routing_key=my.test exchange=my.topic payload="hello world" 使用路由转发消息
rabbitmqadmin get queue=test requeue=true 查看消息,不消费
rabbitmqadmin get queue=test requeue=false 查看消息,并消费
rabbitmqadmin purge queue name=test 删除队列中的所有消息
rabbitmqadmin delete queue name=hello 删除消息队列 Queue
rabbitmqadmin delete user name=test 删除用户 User
rabbitmqadmin delete exchange name=test 删除路由器 Exchange
rabbitmqadmin delete binding source=‘kk‘ destination_type=queue destination=test properties_key=test 删除路由器与消息队列的关系绑定 Binding
rabbitmqadmin -f raw_json list users raw_json 格式化输出
rabbitmqadmin -f long list users 格式化输出
rabbitmqadmin -f pretty_json list users pretty_json 格式化输出
rabbitmqadmin -f kvp list users 格式化输出
rabbitmqadmin -f tsv list users 格式化输出
rabbitmqadmin -f table list users table 格式化输出
rabbitmqadmin -f bash list users bash 格式化输出

参考资料:

原文地址:https://www.cnblogs.com/xishuai/p/rabbitmq-cli-rabbitmqadmin.html

时间: 2024-10-10 03:40:26

RabbitMQ CLI 管理工具 rabbitmqadmin(管理和监控)的相关文章

MySQL管理工具-phpMyAdmin管理平台搭建

4 MySQL管理工具 4.1 问题 本案例要求基于LAMP平台部署一套phpMyAdmin应用系统,实现对MySQL服务器的Web方式管理. 4.2 方案 使用2台RHEL6虚拟机 + 1台Windows 7真机,如图-2所示.其中192.168.4.10是MySQL服务器,授权操作在此服务器上执行:另一台Linux服务器192.168.4.6上部署phpMyAdmin管理平台,实现从浏览器访问的Web管理方式. 图-2 4.3 步骤 实现此案例需要按照如下步骤进行. 步骤一:在MySQL服务

win服务器批量管理工具 批量管理vps

远程桌面是微软公司为了便于网络管理员管理维护服务器推出的一项服务.从windows 2000 server版本开始引入,网络管理员时候远程桌面连接器连接到网络任意一台开启了远程桌面控制功能的计算机上,就像是自己操作该计算机一样,运行程序,维护数据库等.远程桌面采用的是一种类似TELNET的技术,它是从TELNET协议发展而来的,通俗的讲远程桌面就是图形化的TELNET.那么如何批量管理我们的多台服务器呢?下面向大家介绍一款远程桌面连接工具——IIS7远程桌面连接工具. 查看地址:iis7远程桌面

服务器批量管理工具 批量管理vps

远程桌面是微软公司为了便于网络管理员管理维护服务器推出的一项服务.从windows 2000 server版本开始引入,网络管理员时候远程桌面连接器连接到网络任意一台开启了远程桌面控制功能的计算机上,就像是自己操作该计算机一样,运行程序,维护数据库等.远程桌面采用的是一种类似TELNET的技术,它是从TELNET协议发展而来的,通俗的讲远程桌面就是图形化的TELNET.那么如何批量管理我们的多台服务器呢?下面向大家介绍一款远程桌面连接工具——IIS7远程桌面连接工具. 查看地址:iis7远程桌面

在Windows7上安装和使用AD DS管理工具

为什么要安装AD DS管理工具 要管理活动目录,默认只有在域控制器下才可以,管理员对活动目录的管理和维护又比较频繁,因此需要经常出入机房才能完成管理任务 用远程桌面也可以进行域管理,但有一定的安全隐患,还会产生较大的网络流量,占用宝贵的带宽资源 AD DS是微软公司基于Windows7系统推出的远程服务管理工具,默认情况下已经设置好了安全措施,可以管理活动目录上的特定功能 下载地址:Download Windows 7 Service Pack 1 (SP1) 远程服务器管理工具 http://

supervisor:进程管理工具

一,安装(任何一种方式) apt-get install supervisor easy_install supervisor pip install supervisor 二,配置 配置supervisor.conf 添加web控制界面 2.    启动进程配置说明 ; 管理单个进程的配置,可创建多个,下面是所有可能的配置选项 ;[program:theprogramname] ;command=/bin/cat ; 启动进程的命令 使用相对路径,可以加参数 ;process_name=%(p

常用进程管理工具

进程管理工具 进程管理工具top/htop/glances/dstat/sar top 是一个实时显示当前系统运行信息的一个工具 常用选项 -z: 高亮显示 -r :选定pid,修改nice值(-20至19) -b :定位到正在运行(running状态)的进程 -k :相当kill shift+<或者> :向右左翻页查看不同的进程 -l: 显示或隐藏第一行的登入或者负载信息 -t :task/cpustats 以不同类型显示cpu和进程统计信息,或者将其隐藏 -m :以不同类型显示内存以及sw

安装Exchange Server2016管理工具

1.  概述 本章节将演示如何在Windows 10 Enterprise计算机安装Exchange Server2016管理工具.Exchange Server 2016管理工具包括Exchange Toolbox.Exchange Management Shell和Exchange Admin Center(EAC),结合以上3个工具可以完美的完成Exchange的所有工作,而不用通过远程桌面连接至Exchange服务器.其中: Exchange Toolbox-常用于查看邮件队列及邮件收发

Microsoft强大团队(源代码)管理工具--TFS2010 与vs结合

今天看了与vs 集成原理工具 TFS 2010, 角色分配.项目管理.开发源代码管理.任务分配管理.测试文档管理及跟踪等管理流程.代码版本的分支与合并等等,功能好强大啊. 以下将其安装配置简要介绍(以下为转载): Team Foundation Server 2010单服务器安装指南(非域环境) Team Foundation Server 2010 单服务器安装指南 一.硬件环境 配置 CPU 硬盘 内存 少于20个用户 1个处理器,2.2GHz 8GB 2GB 20到250个用户 1个处理器

安装 SQL SERVER 2008 必须使用 &quot;角色管理工具&quot; 错误 的 解决方案 (转)

刚在服务器(Win2008)上安装SqlServer2008的时候出现了这么一个报错——必须使用“角色管理工具”安装或配置Microsoft .NET Framework 3.5 SP1.一开始以为是没装3.5,后来看了一下服务器上已经装了VS2010了,于是排除这个可能性.Google了一下,于是找到问题的解决方法.(尼玛,最近老是要去服务器上安装和部署各种东西然后就遇到各种问题\("▔□▔)/) 1.问题表现如下,弹出来一提示框:     2.根据提示,先打开角色管理工具.“控制面板”-&g