rabbitmq管理利器——rabbitmqadmin

摘要:在运维rabbitmq集群的过程中,发生了队列的严重堆积,我们在可以容忍mq消息丢失的情况下,使用常用的purge_queue queue命令等好长时间都清理不成功,在管理页面上直接purge导致页面卡住不动,最终都没有办法达到清理成功的效果。这个时候发现了一个python的rabbitmq管理工具,非常的好用且迅速,在此记录。

如何获取rabbitmqadmin

方法1. 直接复制出来

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
cp -a /var/lib/rabbitmq/mnesia/rabbit@localhost-plugins-expand/rabbitmq_management-3.3.5/priv/www/cli/rabbitmqadmin /usr/local/bin/rabbitmqadmin
```
**方法2** 从管理页面获取

1. 打开`rabbitmq_management`,访问15672管理页面,方法见<a href="https://qupzhi.com/first-blog" target="_blank">rabbitmq集群的各种运维操作 4.2 打开15672网页管理端,访问mq </a>
2. 访问 ip:15672/rabbitmqadmin
下载页面,另存为`rabbitmqadmin.py`,放到此目录:`/usr/local/bin/rabbitmqadmin`,授权`chmod +x /usr/local/bin/rabbitmqadmin`

多一句废话:可以使用wget直接下载页面上的东西

# 常用命令
## 查看
```bash
rabbitmqadmin list users #查看用户列表
rabbitmqadmin list vhosts #查看vhosts
rabbitmqadmin list connections ###查看 connections
rabbitmqadmin list exchanges ##查看 exchanges
rabbitmqadmin list bindings ##查看 bindings
rabbitmqadmin list permissions ##查看 permissions
rabbitmqadmin list channels ##查看 channels
rabbitmqadmin list parameters ##查看 parameters
rabbitmqadmin list consumers ##查看consumers
rabbitmqadmin list queues ##查看queues
rabbitmqadmin list policies ##查看policies
rabbitmqadmin list nodes ##查看nodes
rabbitmqadmin show overview ##查看overview

系统操作

用户管理操作

  1. 新增一个用户

    1
    2
    rabbitmqctl  add_user  Username  Password
    rabbitmqadmin declare user name=wyl password=password tags=administrator
  2. 删除一个用户

    1
    rabbitmqctl  delete_user  Username
  3. 修改用户的密码

    1
    rabbitmqctl  change_password  Username  Newpassword
  4. 查看当前用户列表

    1
    2
    3
    rabbitmqctl  list_users
    rabbitmqadmin list users # 查看 users
    rabbitmqadmin list users name # 查看 users的时候限制字段
  5. 设置用户角色

    1
    rabbitmqctl  set_user_tags  User  Tag

User为用户名, Tag为角色名(对应于administrator,monitoring,policymaker,management,或其他自定义名称见用户角色)。
也可以给同一用户设置多个角色,例如

1
rabbitmqctl  set_user_tags  hncscwc  monitoring policymaker

队列操作

添加queue

1
2
rabbitmqadmin declare queue name=test durable=true    ## durable=true 代表持久化打开  declare是宣布的意思
rabbitmqadmin --vhost=test --username=admin --password=admin declare queue name=test durable=true #指定vhost添加队列

查看queues

1
2
3
[root@rabbitmq1 sbin]# rabbitmqadmin list queues
#查看bindings
[root@rabbitmq1 sbin]# rabbitmqadmin list bindings

添加消息到test queue

1
rabbitmqadmin publish routing_key=test payload="this is a testing"     ##未指定exchange默认 exchange name为空

再次查看对列发现test有一条消息

1
[root@rabbitmq1 sbin]# rabbitmqadmin list queues

从test queue消费一条信息

1
rabbitmqadmin get queue=test requeue=true   #requeue=true 这条消息消费后还在,反之如果为false消费后消息就不在了。

删除队列

1
rabbitmqadmin delete queue name=test

清除队列消息内容

1
rabbitmqadmin purge queue name=队列名

其他

指定输出格式

使用 -f 可以指定格式
有如下几种格式 raw_json, long, pretty_json, kvp, tsv, table, bash 默认为 table,具体自己试

用户角色

  1. 超级管理员(administrator)
    可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
  2. 监控者(monitoring)
    可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
  3. 策略制定者(policymaker)
    可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。
    与administrator的对比,administrator能看到这些内容
  4. 普通管理者(management)
    仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
  5. 其他
    无法登陆管理控制台,通常就是普通的生产者和消费者。
    了解了这些后,就可以根据需要给不同的用户设置不同的角色,以便按需管理。

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
rabbitmqctl list_queues:查看所有队列信息

rabbitmqctl stop_app:关闭应用(关闭当前启动的节点)

rabbitmqctl start_app:启动应用,和上述关闭命令配合使用,达到清空队列的目的

rabbitmqctl reset:从管理数据库中移除所有数据,例如配置过的用户和虚拟宿主, 删除所有持久化的消息(这个命令要在rabbitmqctl stop_app之后使用)

rabbitmqctl force_reset:作用和rabbitmqctl reset一样,区别是无条件重置节点,不管当前管理数据库状态以及集群的配置。如果数据库或者集群配置发生错误才使用这个最后的手段

rabbitmqctl status:节点状态

rabbitmqctl add_user username password:添加用户

rabbitmqctl list_users:列出所有用户

rabbitmqctl list_user_permissions username:列出用户权限

rabbitmqctl change_password username newpassword:修改密码

rabbitmqctl add_vhost vhostpath:创建虚拟主机

rabbitmqctl list_vhosts:列出所有虚拟主机

rabbitmqctl set_permissions -p vhostpath username ".*" ".*" ".*":设置用户权限

rabbitmqctl list_permissions -p vhostpath:列出虚拟主机上的所有权限

rabbitmqctl clear_permissions -p vhostpath username:清除用户权限

rabbitmqctl -p vhostpath purge_queue blue:清除队列里的消息

rabbitmqctl delete_user username:删除用户

rabbitmqctl delete_vhost vhostpath:删除虚拟主机

未完待续-催更 pzqu@qq.com

参考

通过rabbitmqadmin管理rabbitmq,【吴业亮】云计算开发工程师

RabbitMQ学习笔记四:RabbitMQ命令(附疑难问题解决)

坚持原创技术分享,您的支持将鼓励我继续创作!