RabbitMQ–基础–5.1–部署–命令
1、常用命令
1.1、查看状态
rabbitmqctl status
显示 Broker 的状态,比如当前 Erlang 节点上运行的应用程序、RabbitMQ/Erlang的版本信息、os 的名称、内存及文件描述符等统计信息。
1.2、查看绑定
rabbitmqctl list_bindings [-p vhost] [bindinginfoitem ...]
# rabbitmqctl list_bindings
1.3、查看当前所有信道的信息
rabbitmqctl list_channels [channelinfoitem ...]
# rabbitmqctl list_channels
1.4、返回 TCP|IP连接的统计信息。
rabbitmqctl list_connections
rabbìtmqctl list_connections [connectioninfoitem ...]
1.5、列举消费者信息
每行将显示由制表符分隔的己订阅队列的名称、相关信道的进程标识、consumerTag、是否需要消费端确认 prefetch_count 及参数列表这些信息。
rabbitmqctl list_consumers [-p vhost]
# rabbitmqctl list_consumers
1.6、查看交换机
rabbitmqctl list_exchanges [-p vhost] [exchangeinfoitem ...]
1.7、健康检查
rabbitmqctl node_health_check
对RabbitMQ 节点进行健康检查,确认应用是否正常运行、list_queues list_channels 是否能够正常返回等。
1.8、查看环境变量
rabbitmqctl environment
显示每个运行程序环境中每个变量的名称和值。
1.9、服务器状态报告
rabbitmqctl report
rabbitmqctl report > report.txt
为所有服务器状态生成一个服务器状态报告,井将输出重定向到一个文件
2、队列相关命令
2.1、查看已声明的队列
rabbitmqctl list_queues [-p vhost] [queueinfoitem ...]
# rabbitmqctl list_queues
2.2、清空队列
# rabbitmqctl purge_queue 队列名称
rabbitmqctl purge_queue test
2.3、删除队列
# rabbitmqctl delete_queue 队列名称
rabbitmqctl delete_queue test
3、用户管理
- 在RabbitMQ 中,用户是访问控制( Access Contro l)的基本单元
- 单个用户可以跨越多个vhost进行授权。针对一至多个vhost,用户可以被赋予不同级别的访问权限,并使用标准的用户名和密码来认证用户。
3.1、新建用户
rabbitmqctl add_user {username} {password}
# 新增用户admin2,密码 123456
rabbitmqctl add_user admin2 123456
3.2、修改用户密码
rabbitmqctl change_password {username} {newPassword}
# 修改admin2密码
rabbitmqctl change_password admin2 1234567
3.3、删除用户
rabbitmqctl delete_user {username}
# 删除admin2用户
rabbitmqctl delete_user admin2
3.4、查看用户
rabbitmqctl list_users
3.5、设置用户角色
rabbitmqctl set_user_tags {username} {tag}
# 给admin用户分配 administrator角色
sudo rabbitmqctl set_user_tags admin administrator
3.5.1、tag的值
- management
- policymaker
- monitoring
- administrator
3.5.1.1、management(普通管理者)
- 可登陆管理控制台
- 无法看到节点信息
- 无法对策略进行管理。
3.5.1.2、policymaker(策略制定者)
- 包含management的所有权限
- 可以管理策略(Policy)和参数Parameter。
3.5.1.3、monitoring(监控者)
- 包含management的所有权限
- 可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
3.5.1.4、administrator(超级管理员,admin)
- 最大权限的角色
- 可以管理用户、虚拟主机、权限、策略、参数等
3.6、清除用户密码
rabbitmqctl clear_password {username}
可以清除密码,这样用户就不能使用密码登录
3.7、验证用户
rabbitmqctl authentiçate_user {username} {passWord}
通过密码来验证用户
3.8、清除用户对某个虚拟机的权限。
rabbitmqctl clear_permissions [-p vhostName] {username}
3.9、显示虚拟主机上的权限。
rabbitmqctl list_permissions [-p vhost]
3.10、显示用户在已分配虚拟机上的权限。
rabbitmqctl list_user_permissions {username}
4、节点管理
4.1、应用–启动
rabbitmqctl start_app
- 启动RabbitMQ应用
- 此命令典型的用途是在执行了其他管理操作之后,重新启动之前停止的RabbitMQ应用,比如rabbitmqctl reset 。
4.2、应用–停止
rabbitmqctl stop_app
- 停止RabbitMQ应用
- Erlang虚拟机处于运行状态
- 此命令的执行优先于其他管理操作,比如rabbitmqctl reset。
4.3、应用–停止
rabbitmqctl stop [pid_file]
- 关闭RabbitMQ应用
- 关闭Erlang虚拟机
- 如果指定了pid_file,还需要等待指定进程的结束。
- pid_file是通过rabbitmq-server命令启动RabbitMQ服务时创建的,默认情况下存放于Mnesia目录中。可以通过RABBITMQ PID FILE这个环境变量来改变存放路径
- rabbitmq-server - detach 这个带有 -detach后缀的命令来启动 RabbitMQ服务则不会生成 pid_file 文件。
4.4、重置RabbitMQ节点
rabbitmqctl reset
- 重置RabbitMQ节点,将清空节点的状态, 并将其恢复到空白状态。
- 从原来所在的集群中删除此节点
- 该命令会和集群中的磁盘节点进行通信, 告诉它们该节点正在离开集群。不然集群会认为该节点出了故障, 并期望其最终能够恢复过来。
- 从管理数据库 中删除所有的配置数据
- 删除 配置的用户、 vhost 等数据
- 删除 所有的持久化消息。
- 执行 rabbi tmqctl reset 命令前必须停止RabbitMQ 应用。
4.5、强制重置RabbitMQ节点
rabbitmqctl force_reset
- 强制将 RabbitMQ 节点重置还原到最初状态。
- 不同于 rabbitmqctl reset 命令, rabbitmqctl force_reset 命令不论当前管理数据库的状态和集群配置是什么,都会无条件地重置节点。
- 只能在数据库或集群配置己损坏的情况下使用。
- 执行 rabbitmqctl force_reset 命令前必须先停止 RabbitMQ 应用。
rabbitmqctl force_reset
4.6、指示RabbitMQ节点轮换日志文件。
rabbitmqctl rotate_logs {suffix}
- 指示RabbitMQ节点轮换日志文件。
- RabbitMQ节点会将原来的日志文件中的内容追加到"原始名称+后缀"的日志文件中,然后再将新的日志内容记录到新创建的日志中(与原日志文件同名)。当目标文件不存在时,会重新创建。如果不指定后缀suffix. 则日志文件只是重新打开而不会进行轮换。
- 举例
- 原日志文件为rabbit@nodel.log和rabbit@nodel-sasl.1og
- 轮换日志之后,原日志文件中的内容就被迫加到rabbit@nodel.log.1和rabbit@nodel-sasl.1og.1日志中,之后重新建立rabbit@nodel.log和rabbit@nodel-sasl.1og文件用来接收新的日志。
4.7、应用–停止
rabbitmqctl shutdown
- 关闭RabbitMQ应用
- 关闭Erlang虚拟机
- 执行这个命令会阻塞,直到Erlang虚拟机进程退出。如果RabbitMQ没有成功关闭,则会返回一个非零值
- 这个命令和rabbitmqctl stop 不同的是,它不需要指定pid_file而可以阻塞等待指定进程的关闭。
4.8、服务
# 启动
systemctl start rabbitmq-server
# 停止
systemctl stop rabbitmq-server
# 查看状态
systemctl status rabbitmq-server
# 重启
systemctl restart rabbitmq-server
4.9、等待RabbitMQ应用的启动
rabbitmqctl wait [pid_file]
- 等待RabbitMQ应用的启动。它会等到pid_file 的创建,然后等待pid_file中所代表的进程启动。
- 当指定的进程没有启动RabbitMQ应用而关闭时将会返回失败。
4.10、将部分RabbitMQ 代码用hipe 编译
rabbitmqctl hipe_compile {directory}
- 将部分RabbitMQ 代码用hipe 编译,并且将编译后的.beam文件保存到指定的文件目录中。
- 如果这个目录不存在则会自行创建。
- 如果这个目录中存在任何.beam 文件,则会在执行编译前被删除。
- 如果要使用预编译的这些文件,则需要设置RABBITMQ SERVER CODE PATH这个环境变量来指定hipe_ompile调用的路径。
- beam 文件
- 是Erlang 编译器生成的文件格式
- 是可以直接加载到Erlang虚拟机中运行的文件格式
5、集群相关命令
5.1、离开集群
rabbitmqctl reset
- 重置RabbitMQ节点,将RabbitMQ节点重置还原到最初状态。
- 从原来所在的集群中删除此节点
- 从管理数据库 中删除所有的配置数据
- 删除 配置的用户、 vhost 等数据
- 删除 所有的持久化消息。
- 执行 rabbi tmqctl reset 命令前必须停止RabbitMQ 应用。
5.2、显示集群的状态
rabbitmqctl cluster_status
5.3、将节点加入指定集群中
- 在这个命令执行前需要停止 RabbitMQ应用井重置节点。
- ram表示节点是内存节点
rabbitmqctl joio_cluster {cluster_node} [--ram]
5.4、修改集群节点的类型
在这个命令执行前需要停止 RabbitMQ应用。
rabbitmqctl change_cluster_node_type {disclram}
5.5、将节点从集群中删除,允许离线执行。
rabbitmqctl forget_cluster_node [--offiine]
5.6、来查看那些slaves已经完成同步
rabbitmqctl list_queues {queue_name} {slave_pids} synchronised_slave_pids
5.7、手动的方式同步一个queue
rabbitmqctl sync_queue [-p vhost] {queue}
- 指示未同步队列queue的slave 镜像可以同步master 镜像行的内容。
- 同步期间此队列会被阻塞(所有此队列的生产消费者都会被阻塞),直到同步完成。
- 此条命令执行成功的前提是队列queue配置了镜像。
- 注意:未同步队列中的消息被耗尽后,最终也会变成同步,此命令主要用于未耗尽的队列。
5.8、取消某个queue的同步功能
rabbitmqctl cancel_sync_queue [-p vhost] {queue_name}
5.9、在集群中的节点应用启动前咨询cluster node节点的最新信息, 并更新相应的集群信息
rabbitmqctl update_cluster_nodes {clusternode}
5.10、无条件地启动节点
rabbitmqctl force_boot
确保节点可以启动,即使它不是最后一个关闭的节点。通常情况下,当关闭整个RabbitMQ集群时,重启的第一个节点应该是最后关闭的节点,因为它可以看到其他节点所看不到的事情。但是有时会有一些异常情况出现,比如整个集群都断电而所有节点都认为它不是最后一个关闭的。在这种情况下,可以调用rabbitmqctl force_boot 命令,这就告诉节点可以无条件地启动节点。
在此节点关闭后,集群的任何变化,它都会丢失。如果最后一个关闭的节点永久丢失了,那么需要优先使用 rabbitmqctl forget_cluster_node --offiine 命令,因为它可以确保镜像队列的正常运转。
5.11、设置集群名称
rabbitmqctl set_cluster_name {name}
- 设置集群名称。
- 集群名称在客户端连接时会通报给客户端。Federation和Shovel 插件也会有用到集群名称的地方
- 集群名称默认是集群中第一个节点的名称,通过这个命令可以重新设置。在Web 管理界面的右上角的地方,点击也可以修改集群名称。
6、镜像队列命令
6.1、设置镜像队列
rabbitmqctl sync_queue
6.2、取消镜像队列
rabbitmqctl cancel_sync_queue
7、插件管理
rabbitmq-plugins [-n node] {command} [command options ...]
7.1、启动插件
rabbitmq-plugins enable [--offline] [--online] {plugin ...}
# 启动插件:Web管理
rabbitmq-plugins enable rabbitmq_management
7.2、禁用插件
rabbitmq-plugins disable [--offline] [--online] {plugin ...}
# 禁用插件:Web管理
rabbitmq-plugins disable rabbitmq_management
7.3、启用指定的插件,并且禁用其他所有插件
rabbitmq-plugin set rabbitmq_management
- 启用 参数指定的插件,并且禁用其他所有插件
- 没有参数表示禁用所有的插件
7.4、显示所有的插件,每一行一个
rabbitmq-plugins list
7.5、显示所有的插件,并且显示插件的版本号和描述信息
rabbitmq-plugins list -v
7.6、显示所有名称含有 “management” 的插件
rabbitmq-plugins list -v management
7.7、显示所有显示或者隐式启动的插件
rabbitmq-plugins list -e rabbit
8、权限管理
8.1、授权
- 在RabbitMQ 中,权限控制则是以vhost为单位的。
- 当创建一个用户时,用户通常会被指派给至少一个vhost,并且只能访问被指派的vhost内的队列、交换器和绑定关系等。因此,RabbitMQ中的授予权限是指在vhost级别对用户而言的权限授予。
8.1.1、命令
rabbitmqctl set permissions [-p vhostName] {userName} {conf} {write} {read}
vhostpath
授予用户访问权限的vhost名称,可以设置为默认值,即 vhost 为 “/”
user
- 可以访问指定vhost 的用户名
- 填写用户名
conf
- 一个正则表达式,用于匹配用户在哪些资源上拥有可配置权限
- 可配置权限:指的是队列和交换器的创建及删除之类的操作
write
- 一个正则表达式,用于匹配用户在哪些资源上拥有可写权限
- 可写:指的是发布消息
read
- 一个正则表达式,用于匹配用户在哪些资源上拥有可读权限。
- 可读:指与消息有关的操作,包括读取消息及清空整个队列等。
8.1.2、举例
rabbitmqctl set_permissions -p / root ".*" ".*" ".*"
用于设置root用户拥有对所有资源的 读写配置权限
8.2、查看用户权限
rabbitmqctl list_permissions [vhostpath]
8.2.1、案例:查看根路径下的所有用户权限
rabbitmqctl list_permissions
8.2.2、案例:查看指定命名空间下的所有用户权限
rabbitmqctl list_permissions /abc
8.3、查看指定用户下的权限
rabbitmqctl list_user_permissions {username}
例如查看root用户下的权限 rabbitmqctl list_user_permissions root
8.3.1、案例:看admin用户下的权限
rabbitmqctl list_user_permissions admin
8.4、清除用户权限
rabbitmqctl clear_permissions {username}
8.4.1、案例:清除bpm用户的权限
rabbitmqctl clear_permissions bpm
9、策略命令
9.1、设置镜像队列
9.1.1、使用场景
1. 搭建集群
2. 使用set_ policy 命令设置镜像队列策略
9.1.2、命令
rabbitmqctl set_ policy [-p Vhost] Name Pattern Definition [Priority]
rabbitmqctl set_ policy Vhost 策略名称 正则表达式 策略定义 优先级
Definition:策略定义
- ha-mode:指明镜像队列的模式
- ha-params: ha-mode模式需要用到的参数
- ha-svnc-mode:进行队列中消息的同步方式,有效值为automatic和manual
ha-mode
- all:表示在集群中所有的节点上进行镜像
- exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
- nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定
9.1.3、设置镜像队列策略案例
9.1.3.1、匹配所有队列,并将镜像配置到集群中的所有节点
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
9.1.3.2、名称以"two"开始的队列镜像到群集中的任意两个节点
rabbitmqctl set_policy ha-two "^two." '{"ha-mode" :" exactly" ,"ha-params":2,"ha-sync-mode":" automatic}'
9.1.3.3、以" node"开头的队列镜像到集群中的特定节点
rabbitmqctl set_policy ha-nodes "^ nodes." '{"ha-mode":" nodes" ,"ha-params" :["rabbit@nodeA", "rabbit@nodeB"]}'
9.2、策略查看
rabbitmqctl list_policies [-p <vhost>]
9.3、策略清除
rabbitmqctl clear_policy [-p <vhost>] <name>
10、vhost命令
10.1、创建一个新的 vhost
rabbitmqctl add vhost {vhostName}
# 创建一个新的vhost,名称为vhostl
# rabbitmqctl add vhost vhostl
vhostName:vhost 的名称
10.2、删除一个vhost
rabbitmqctl delete_vhost {vhostName}
# rabbitmqctl delete_vhost vhostl
- 删除一个vhost
- 同时也会删除其下所有的队列、交换器、绑定关系、 用户权限、参数和策略等信息
10.3、罗列出所有虚拟机
rabbitmqctl list_vhosts [name,tracing]
- name:罗列出所有虚拟机
- tracing:表示是否使用了 RabbitMQ 的 trace 功能