本文是《RabbitMQ实战指南》(朱忠华 著)学习笔记,仅供本人学习研究之用,如若喜欢请购买正版书籍。如有侵权,请联系删除。
多租户与权限
每一个 RabbitMQ 服务器都能创建虚拟的消息服务器,即虚拟主机 (virtual host) ,简称 vhost。每一个 vhost 本质上是一个独立的 RabbitMQ 服务器,拥有自己独立的队列、交换器、绑定关系、权限等。vhost 就像是虚拟机与物理服务器一样,它们在各个实例间提供逻辑上的分离,为不同程序安全保密地运行数据,它既能将同 一个RabbitMQ 中的众多客户区分开,又可以避免队列和交换器等命名冲突。vhost 之间是绝对隔离的,无法将 vhost1 中的交换器与 vhost2 中的队列进行绑定,这样既保证了安全性,又可以确保可移植性。
vhost 是 AMQP 概念的基础,客户端在连接的时候必须制定一个 vhost。RabbitMQ 默认创建的 vhost 为 "/",如果不需要多个 vhost 那么用这个默认的 vhost 也是可以的。
可以使用 rabbitmqctl add_vhost {vhost} 命令创建一个新的 vhost,{}中的参数表示 vhost 的名称,示例如下:
root@wuychn:~# rabbitmqctl add_vhost vhost1
Creating vhost "vhost1"
可以使用 rabbitmqctl list_vhosts [vhostinfoitem...] 命令列出当前 vhost 的相关信息。vhostinfoitem 是可选的,目前 vhostinfoitem 的取值有 2 个:
• name:表示vhost的名称。
• tracing:表示是否使用了 RabbitMQ 的 trace 功能。
示例如下:
root@wuychn:~# rabbitmqctl list_vhosts name tracing
Listing vhosts
vhost1 false
/ false
root@wuychn:~#
root@wuychn:~# rabbitmqctl trace_on
Starting tracing for vhost "/"
root@wuychn:~#
root@wuychn:~# rabbitmqctl list_vhosts name tracing
Listing vhosts
vhost1 false
/ true
删除 vhost 的命令是 rabbitmqctl delete_vhost {vhost) ,{} 中的参数表示 vhost 的名称。删除一个 vhost 同时也会删除其下所有的队列、交换器、绑定关系、用户权限、参数和策略等信息。示例如下:
root@wuychn:~# rabbitmqctl delete_vhost vhost1
Deleting vhost "vhost1"
root@wuychn:~#
root@wuychn:~# rabbitmqctl list_vhosts
Listing vhosts
/
AMQP 协议中并没有指定权限在 vhost 级别还是在服务器级别实现,由具体的应用自定义。在 RabbitMQ 中,权限控制则是以 vhost 为单位的。当创建一个用户时,用户通常会被指派给至少一个 vhost,并且只能访问被指派的 vhost 内的队列、交换器和绑定关系等。因此,RabbitMQ 中的授予权限是指在 vhost 级别对用户而言的权限授予。
对用户授予权限命令为:rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}。参数含义如下:
• vhost:授予用户访问权限的 vhost 名称,可以设置为默认值,即 vhost 为 "/"。
• user:可以访问指定 vhost 的用户名。
• conf:一个用于匹配用户在哪些资源上拥有可配置权限的正则表达式。
• write:一个用于匹配用户在哪些资源上拥有可写权限的正则表达式。
• read:一个用于匹配用户在哪些资源上拥有可读权限的正则表达式。
可配置指的是队列和交换器的创建及删除之类的操作;可写指的是发布消息;可读指与消息有关的操作,包括读取消息及清空整个队列等。
例如,授予 root 用户可访问虚拟主机 vhost1,并在所有资源上都具备可配置、可写及可读的权限:
root@wuychn:~# rabbitmqctl set_permissions -p vhost1 root ".*" ".*" ".*"
Setting permissions for user "root" in vhost "vhost1"
授予 root 用户可访问虚拟主机 vhost2,在 以 "queue" 开头的资源上具备可配置权限,并在所有资源上拥有可写、可读的权限,示例如下:
root@wuychn:~# rabbitmqctl set_permissions -p vhost2 root "^queue" ".*" ".*"
Setting permissions for user "root" in vhost "vhost2"
清除权限也是在 vhost 级别对用户而言的。清除权限的命令为 rabbitmqctl clear_permissions [-p vhost] {username}。其中 vhost 用于设置禁止用户访问的虚拟主机的名称,默认为 "/ " ,username 表示禁止访问特定虚拟主机的用户名称。示例如下:
root@wuychn:~# rabbitmqctl clear_permissions -p vhost1 root
Clearing permissions for user "root" in vhost "vhost1"
RabbitMQ 中有两个 Shell 命令可以列举权限信息。第一个命令是 rabbitmqctl list_permissions [-p vhost],用来显示虚拟主机上的权限;第二个命令是 rabbitmqctl list_user_permissions {username},用来显示用户的权限。示例如下:
root@wuychn:~# rabbitmqctl list_permissions -p vhost1
Listing permissions in vhost "vhost1"
root .* .* .*
root@wuychn:~#
root@wuychn:~# rabbitmqctl list_user_permissions root
Listing permissions for user "root"
vhost1 .* .* .*
/ .* .* .*
vhost2 ^queue .* .*
到目前为止,我们用到的所有命令都是 rabbitmqctl 工具的扩展命令,rabbitmqctl 工具是用来管理 RabbitMQ 中间件的命令行工具,它通过连接各个 RabbitMQ 节点来执行所有操作。如果有节点没有运行,将显示诊断信息:不能到达或因不匹配的 Erlang cookie 而拒绝连接。
rabbitmqctl 工具的标准语法如下 ( [ ]表示可选参数,{}表示必选参数):
rabbitmqctl [-n node] [-t timeout] [-q] {command} [command options...]
-n node表示节点,默认节点是"rabbit@hostname“,此处的 hostname 是主机名称。
-q 用来启用 quiet 模式,这样可以屏蔽一些消息的输出。默认不开启 quiet 模式。
-t timeout 指定操作超时时间(单位为秒),只适用于 "list xxx" 类型的命令,默认是无穷大。
示例:
root@wuychn:~# rabbitmqctl list_vhosts
Listing vhosts
vhost1
/
vhost2
root@wuychn:~#
root@wuychn:~# rabbitmqctl list_vhosts -q
vhost1
/
vhost2
root@wuychn:~#
root@wuychn:~# rabbitmqctl list_vhosts -q -t 1
vhost1
/
vhost2
root@wuychn:~#
root@wuychn:~#
root@wuychn:~# rabbitmqctl list_vhosts -q -t 0
Error: {timeout,0.0}
用户管理
在 RabbitMQ 中,用户是访问控制 (Access Control)的基本单元,单个用户可以跨越多个 vhost 进行授权。针对不同的 vhost,用户可以被赋予不同级别的访问权限。
创建用户的命令为 rabbitmqctl add_user {username} {password} 。其中 username 表示要创建的用户名称,password 表示创建用户登录的密码。比如,创建一个用户名为 test,密码为 123456 的用户:
root@wuychn:~# rabbitmqctl add_user test 1234456
Creating user "test"
可以通过 rabbitmqctl change_password {username} {newpassword} 命令来更改指定用户的密码,其中 username 表示要变更密码的用户名称,newpassword 表示要变更的新的密码。示例如下:
root@wuychn:~# rabbitmqctl change_password test 654321
Changing password for user "test"
可以清除用户密码,这样用户就不能使用密码登录了,对应的操作命令为 rabbitmqctl clear_password {username} 。
使用 rabbitmqctl authentiçate_user {username} {password} 命令可以通过密码来验证用户,其中 username 表示需要被验证的用户名称, password 表示密码。示例如下:
root@wuychn:~# rabbitmqctl authenticate_user test 123456
Authenticating user "test"
Error: failed to authenticate user "test"
root@wuychn:~#
root@wuychn:~#
root@wuychn:~# rabbitmqctl authenticate_user test 654321
Authenticating user "test"
Success
删除用户的命令是 rabbitmqctl delete_user {username) ,其中 username 表示要删除的用户名称。示例如下:
root@wuychn:~# rabbitmqctl delete_user test
Deleting user "test"
rabbitmqctl list_users 命令用来列出所有用户,包含用户名称和用户的角色(tags)。示例如下:
root@wuychn:~# rabbitmqctl list_users
Listing users
guest [administrator]
root [administrator]
用户的角色分为 5 种类型:
• none:无任何角色。新创建的用户的角色默认为 none。
• management:可以访问 Web 管理页面。
• policymaker:包含 management 的所有权限,并且可以管理策略 (Policy)和参数(Parameter)。
• monitoring:包含 management 的所有权限,并且可以看到所有连接、信道及节点相关的信息。
• administartor:包含 monitoring 的所有权限,井且可以管理用户、 虚拟主机、权限、策略、参数等。administator 代表了最高的权限。
用户的角色可以通过 rabbitmqctl set_user_tags {username} {tag ...} 命令设置。 其中 username 参数表示需要设置角色的用户名称;tag 参数是要为用户的角色,可以是多个,设置之后任何现有的身份都会被删除。示例如下:
root@wuychn:~# rabbitmqctl set_user_tags root monitoring
Setting tags for user "root" to [monitoring]
root@wuychn:~#
root@wuychn:~# rabbitmqctl list_users -q
guest [administrator]
root [monitoring]
root@wuychn:~#
root@wuychn:~# rabbitmqctl set_user_tags root policymaker -q
root@wuychn:~#
root@wuychn:~#
root@wuychn:~# rabbitmqctl list_users -q
guest [administrator]
root [policymaker]
root@wuychn:~#
root@wuychn:~#
root@wuychn:~# rabbitmqctl set_user_tags root
Setting tags for user "root" to []
root@wuychn:~#
root@wuychn:~#
root@wuychn:~# rabbitmqctl list_users -q
guest [administrator]
root []
root@wuychn:~#
root@wuychn:~# rabbitmqctl set_user_tags root policymaker,managment
Setting tags for user "root" to ['policymaker,managment']
root@wuychn:~#
root@wuychn:~#
root@wuychn:~# rabbitmqctl list_users -q
guest [administrator]
root [policymaker,managment]
Web 端管理
RabbitMQ management 插件提供了 Web 管理界面来管理虚拟主机、用户、队列、交换器 、绑定关系、策略、参数等,还可以用来监控 RabbitMQ 服务的状态及一些数据统计类信息,基本上能够涵盖所有 RabbitMQ 管理的功能。
在使用 Web 管理界面之前需要先启用 RabbitMQ management 插件。RabbitMQ 提供了很多的插件,默认存放在 ${RABBITMQ HOME}/plugins 目录下。如下:
-rw-r--r-- 1 root root 271784 1月 17 2018 amqp_client-3.6.15.ez
-rw-r--r-- 1 root root 226026 1月 17 2018 cowboy-1.0.4.ez
-rw-r--r-- 1 root root 125713 1月 17 2018 cowlib-1.0.2.ez
-rw-r--r-- 1 root root 636250 1月 17 2018 rabbit_common-3.6.15.ez
-rw-r--r-- 1 root root 211676 1月 17 2018 rabbitmq_amqp1_0-3.6.15.ez
-rw-r--r-- 1 root root 34406 1月 17 2018 rabbitmq_auth_backend_ldap-3.6.15.ez
-rw-r--r-- 1 root root 13122 1月 17 2018 rabbitmq_auth_mechanism_ssl-3.6.15.ez
-rw-r--r-- 1 root root 14554 1月 17 2018 rabbitmq_consistent_hash_exchange-3.6.15.ez
-rw-r--r-- 1 root root 11469 1月 17 2018 rabbitmq_event_exchange-3.6.15.ez
-rw-r--r-- 1 root root 164963 1月 17 2018 rabbitmq_federation-3.6.15.ez
-rw-r--r-- 1 root root 14369 1月 17 2018 rabbitmq_federation_management-3.6.15.ez
-rw-r--r-- 1 root root 22470 1月 17 2018 rabbitmq_jms_topic_exchange-3.6.15.ez
-rw-r--r-- 1 root root 777926 1月 17 2018 rabbitmq_management-3.6.15.ez
-rw-r--r-- 1 root root 150373 1月 17 2018 rabbitmq_management_agent-3.6.15.ez
-rw-r--r-- 1 root root 41424 1月 17 2018 rabbitmq_management_visualiser-3.6.15.ez
-rw-r--r-- 1 root root 108937 1月 17 2018 rabbitmq_mqtt-3.6.15.ez
-rw-r--r-- 1 root root 5314 1月 17 2018 rabbitmq_random_exchange-3.6.15.ez
-rw-r--r-- 1 root root 14678 1月 17 2018 rabbitmq_recent_history_exchange-3.6.15.ez
-rw-r--r-- 1 root root 34218 1月 17 2018 rabbitmq_sharding-3.6.15.ez
-rw-r--r-- 1 root root 83538 1月 17 2018 rabbitmq_shovel-3.6.15.ez
-rw-r--r-- 1 root root 19043 1月 17 2018 rabbitmq_shovel_management-3.6.15.ez
-rw-r--r-- 1 root root 109933 1月 17 2018 rabbitmq_stomp-3.6.15.ez
-rw-r--r-- 1 root root 52652 1月 17 2018 rabbitmq_top-3.6.15.ez
-rw-r--r-- 1 root root 49971 1月 17 2018 rabbitmq_tracing-3.6.15.ez
-rw-r--r-- 1 root root 50939 1月 17 2018 rabbitmq_trust_store-3.6.15.ez
-rw-r--r-- 1 root root 40479 1月 17 2018 rabbitmq_web_dispatch-3.6.15.ez
-rw-r--r-- 1 root root 24740 1月 17 2018 rabbitmq_web_mqtt-3.6.15.ez
-rw-r--r-- 1 root root 66263 1月 17 2018 rabbitmq_web_mqtt_examples-3.6.15.ez
-rw-r--r-- 1 root root 37754 1月 17 2018 rabbitmq_web_stomp-3.6.15.ez
-rw-r--r-- 1 root root 52196 1月 17 2018 rabbitmq_web_stomp_examples-3.6.15.ez
-rw-r--r-- 1 root root 57959 1月 17 2018 ranch-1.3.2.ez
-rw-r--r-- 1 root root 59 1月 17 2018 README
-rw-r--r-- 1 root root 55939 1月 17 2018 recon-2.3.2.ez
-rw-r--r-- 1 root root 101020 1月 17 2018 sockjs-0.3.4.ez
其中以 .ez 扩展名称结尾的文件就是 RabbitMQ 的插件,而 rabbitmq_management-3.6.15.ez 就是 RabbitMQ Management 插件。启动插件的命令不是使用 rabbitmqctl 工具,而是使用 rabbitmq-plugins,其语法如下:
rabbitmq-plugins [-n node] {command} [command options ... ]
启动插件的命令是:
rabbitmq-plugins enable [plugin-name]
关闭插件的命令是:
rabbitmq-plugins disable [plugin-name]
执行如下命令来开启 RabbitMQ managmenet 插件:
root@wuychn:/# rabbitmq-plugins enable rabbitmq_management
The following plugins have been enabled:
amqp_client
cowlib
cowboy
rabbitmq_web_dispatch
rabbitmq_management_agent
rabbitmq_management
Applying plugin configuration to rabbit@wuychn... started 6 plugins.
可以通过 rabbitmq-plugins list 命令来查看当前插件的使用情况:
root@wuychn:/# rabbitmq-plugins list
Configured: E = explicitly enabled; e = implicitly enabled
| Status: * = running on rabbit@wuychn
|/
[e*] amqp_client 3.6.15
[e*] cowboy 1.0.4
[e*] cowlib 1.0.2
[ ] rabbitmq_amqp1_0 3.6.15
[ ] rabbitmq_auth_backend_ldap 3.6.15
[ ] rabbitmq_auth_mechanism_ssl 3.6.15
[ ] rabbitmq_consistent_hash_exchange 3.6.15
[ ] rabbitmq_event_exchange 3.6.15
[ ] rabbitmq_federation 3.6.15
[ ] rabbitmq_federation_management 3.6.15
[ ] rabbitmq_jms_topic_exchange 3.6.15
[E*] rabbitmq_management 3.6.15
[e*] rabbitmq_management_agent 3.6.15
[ ] rabbitmq_management_visualiser 3.6.15
[ ] rabbitmq_mqtt 3.6.15
[ ] rabbitmq_random_exchange 3.6.15
[ ] rabbitmq_recent_history_exchange 3.6.15
[ ] rabbitmq_sharding 3.6.15
[ ] rabbitmq_shovel 3.6.15
[ ] rabbitmq_shovel_management 3.6.15
[ ] rabbitmq_stomp 3.6.15
[ ] rabbitmq_top 3.6.15
[ ] rabbitmq_tracing 3.6.15
[ ] rabbitmq_trust_store 3.6.15
[e*] rabbitmq_web_dispatch 3.6.15
[ ] rabbitmq_web_mqtt 3.6.15
[ ] rabbitmq_web_mqtt_examples 3.6.15
[ ] rabbitmq_web_stomp 3.6.15
[ ] rabbitmq_web_stomp_examples 3.6.15
[ ] sockjs 0.3.4
其中标记为 [E*] 的为显式启动,而 [e*] 为隐式启动,显式启动 rabbitmq management 插件会同时隐式启动 amqp_client、cowboy、cowlib、rabbitmq_management_agent 、rabbitmq_web_dispatch 等另外 5 个插件。
开启 rabbitmq_management 插件之后还需要重启 RabbitMQ 服务才能使其正式生效。之后通过浏览器访问 http://localhost:15672/,会出现一个认证登录的界面,可以通过默认的 guest/guest 的用户名和密码来登录。如果访问的 IP 地址不是本地地址,比如在 192.168.0.2 的主机上访问 http://192.168.0.3:15672 的 Web 管理页面,使用默认的 guest 账户是访问不了的 。
登录之后,可以看到 Web 管理的主界面如图所示:
通过 Web 管理界面可以新增用户、删除用户、新增虚拟主机等操作。
关闭 RabbitMQ management 插件的命令是:
rabbitmq-plugins disable rabbitmq_management
应用与集群管理
本节主要阐述应用与集群相关的一些操作管理命令,包括关闭、重置、开启服务,还有建立集群的一些信息。
应用管理
1、rabbitmqctl stop [pid_file]
用于停止运行 RabbitMQ 的 Erlang 虚拟机和 RabbitMQ 服务。如果指定了 pid_file,还需要等待指定进程的结束。其中 pid_file 是通过调用 rabbitmq-server 命令启动 RabbitMQ 服务时创建的,默认情况下存放于 Mnesia 目录中,可以通过 RABBITMQ_PID_FILE 这个环境变量来改变存放路径。注意,如果使用 rabbitmq-server -detached 这个带有 -detached 后缀的命令来启动 RabbitMQ 服务则不会生成 pid_file 文件。示例如下:
root@wuychn:/# rabbitmqctl stop
Stopping and halting node rabbit@wuychn
2、rabbitmqctl shutdown
用于停止运行 RabbitMQ 的 Erlang 虚拟机和 RabbitMQ 服务应用。执行这个命令会阻塞直到 Erlang 虚拟机进程退出。如果 RabbitMQ 没有成功关闭,则会返回一个非零值。这个命令和 rabbitmqctl stop 的区别是,它不需要指定 pid_file 而可以阻塞等待指定进程的关闭。示例如下:
root@wuychn:/# rabbitmqctl shutdown
Shutting down RabbitMQ node rabbit@wuychn running at PID 7736
Waiting for PID 7736 to terminate
RabbitMQ node rabbit@wuychn running at PID 7736 successfully shut down
3、rabbitmqctl stop_app
停止 RabbitMQ 服务应用,但是 Erlang 虚拟机还是处于运行状态。此命令的执行优先于其他管理操作(这些管理操作需要先停止 RabbitMQ 应用),比如 rabbitmqctl reset。示例如下:
root@wuychn:/# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@wuychn
4、rabbitmqctl start_app
启动 RabbitMQ 应用。此命令典型的用途是在执行了其他管理操作之后,重新启动之前停止的 RabbitMQ 应用,比如 rabbitmqctl reset。
root@wuychn:/# rabbitmqctl start_app
Starting node rabbit@wuychn
5、rabbitmqctl wait [pid_file]
等待 RabbitMQ 应用的启动。它会等到 pid_file 的创建,然后等待 pid_file 中所代表的进程启动。当指定的进程没有启动 RabbitMQ 应用而关闭时将会返回失败。
root@wuychn:/# rabbitmqctl wait /opt/apps/rabbitmq/var/lib/rabbitmq/mnesia/rabbit@wuychn.pid
Waiting for rabbit@wuychn
pid is 2021
Error: process_not_running
6、rabbitmqctl reset
将 RabbitMQ 节点还原到最初状态。包括从原来所在的集群中删除此节点,从管理数据库中删除所有的配置数据,如已配置的用户、vhost 等,以及删除所有的持久化消息。执行 rabbitmqctl reset 命令前必须停止RabbitMQ 应用(比如先执行 rabbitmqctl stop_app)。
7、rabbitmqctl force_reset
强制将 RabbitMQ 节点还原到最初状态。不同于 rabbitmqctl reset 命令,rabbitmqctl force_reset 命令不论当前管理数据库的状态和集群配置是什么,都会无条件地重置节点。它只能在数据库或集群配置己损坏的情况下使用。与 rabbitmqctl reset 命令一样,执行 rabbitmqctl force_reset 命令前必须先停止 RabbitMQ 应用。
8、rabbitmqctl rotate_logs {suffix}
指示 RabbitMQ 节点轮换日志文件。RabbitMQ 节点会将原来的日志文件中的内容追加到"原始名称+后缀"的日志文件中,然后再将新的日志内容记录到新创建的日志中(与原日志文件同名)。当目标文件不存在时,会重新创建。如果不指定后缀 suffix,则日志文件只是重新打开而不会进行轮换。
9、rabbitmqctl hipe_compile {directory}
将部分 RabbitMQ 代码用 HiPE (HiPE 是指 High Performance Erlang,是 Erlang 版的JIT)编译,井且将编译后的 .beam 文件 ( beam 文件是 Erlang 编译器生成的文件格式,可以直接加载到 Erlang 虚拟机中运行的文件格式)保存到指定的文件目录中。如果这个目录不存在则会自行创建。如果这个目录中原本有任何 .beam 文件,则会在执行编译前被删除。如果要使用预编译的这些文件,则需要设置 RABBITMQ_SERVER_CODE_PATH 这个环境变量来指定 hipe_compile 调用的路径。
集群管理
1、rabbitmqctl join_cluster {cluster_node} [--ram]
将节点加入指定集群中。在这个命令执行前需要停止 RabbitMQ 应用并重置节点。
2、rabbitmqctl cluster_status
显示集群的状态。
3、rabbitmqctl change_cluster_node_type {disc l ram}
修改集群节点的类型。在这个命令执行前需要停止 RabbitMQ 应用。
4、rabbitmqctl forget_cluster_node [--offline]
将节点从集群中删除,允许离线执行。
5、rabbitmqctl update_cluster_nodes {clusternode}
在集群中的节点应用启动前咨询 clusternode 节点的最新信息,并更新相应的集群信息。这个和 join_cluster 不同,它不加入集群。考虑这样一种情况,节点 A 和节点 B 都在集群中,当节点 A 离线了,节点 C 又和节点 B 组成了一个集群,然后节点 B 又离开了集群 , 当 A 醒来的时候,它会尝试联系节点 B,但是这样会失败, 因为节点 B 已经不在集群中了,rabbitmqctl update_cluster_nodes -n A C 可以解决这种场景下出现的问题。
6、rabbitmqctl force_boot
确保节点可以启动,即使它不是最后一个关闭的节点。通常情况下,当关闭整个 RabbitMQ 集群时,重启的第一个节点应该是最后关闭的节点,因为它可以看到其他节点所看不到的事情。但是有时会有一些异常情况出现,比如整个集群都掉电而导致所有节点都认为它不是最后一个关闭的。在这种情况下,可以调用 rabbitmqctl force_boot 命令,这就告诉节点可以无条件地启动节点。在此节点关闭后,集群的任何变化,它都会丢失。如果最后一个关闭的节点永久丢失了,那么需要优先使用 rabbitmqctl forget_cluster_node --offline 命令,因为它可以确保镜像队列的正常运转。
7、rabbitmqctl sync_queue [-p vhost] {queue}
指示未同步队列 queue 的 slave 镜像可以同步 master 镜像行的内容。同步期间此队列会被阻塞(所有此队列的生产消费者都会被阻塞),直到同步完成。此条命令执行成功的前提是队列 queue 配置了镜像。注意,未同步队列中的消息被耗尽后,最终也会变成同步,此命令主要用于未耗尽的队列。
8、rabbitmqctl cancel_sync_queue [-p vhost] {queue}
取消队列 queue 同步镜像的操作。
9、rabbitmqctl set_cluster_name {name}
设置集群名称。集群名称在客户端连接时会通报给客户端。集群名称默认是集群中第一个节点的名称,通过这个命令可以重新设置。在 Web 管理界面也可以修改集群名称。
服务端状态
服务器状态的查询会返回一个以制表符分隔的列表,list_queues、list_exchanges、list_bindings 和 list_consumers 这种命令接受一个可选的 vhost 参数以显示其结果,默认值为 "/"。
1、rabbitmqctl list_queues [-p vhost] [queueinfoitem...]
此命令返回队列的详细信息,如果无 [-p vhost] 参数,将显示默认 vhost 为 "/ " 中的队列详情。queueinfoitem 参数用于指示哪些队列的信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。 queueinfoitem 的取值可以网上搜索。如果没有指定 queueinfoitems,那么此命令将显示队列的名称和消息的个数。示例如下:
root@wuychn:/# rabbitmqctl list_queues name durable auto_delete arguments -q
queue_demo3 true false []
queue_demo true false []
queue_demo5 true false [{"x-dead-letter-exchange","dlx_exchange"}]
queue.dlx true false []
queue_batch_async_confirm true false []
queue_demo2 true false [{"x-message-ttl",6000}]
queue_batch_confirm true false []
queue_confirm true false []
queue1 true false []
queue2 true false []
queue_demo1 true false []
queue_demo6 true false [{"x-dead-letter-exchange","dlx_exchange"},{"x-dead-letter-routing-key","dlx-routing-key"}]
queue_tx true false []
queue.normal true false [{"x-dead-letter-exchange","exchange.dlx"},{"x-message-ttl",10000},{"x-dead-letter-routing-key","routingkey"}]
2、rabbitmqctl list_exchanges [-p vhost] [exchangeinfoitem ...]
返回交换器的详细信息,如果无 [ -p vhost] 参数,将显示默认 vhost 为 "/" 中的交换器详情。exchangeinfoitem 参数用于指示哪些信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。 exchangeinfoitem 的取值可以网上搜索。如果没有指定 exchangeinfoitem,那么此命令将显示交换器的名称和类型。示例如下:
root@wuychn:/# rabbitmqctl list_exchanges name type durable auto_delete internal arguments policy -q
exchange_demo direct true false false []
exchange_tx direct true false false []
exchange_confirm direct true false false []
amq.fanout fanout true false false []
direct true false false []
amq.rabbitmq.trace topic true false true []
amq.rabbitmq.log topic true false true []
exchange_batch_confirm direct true false false []
exchange_demo1 direct true false false []
exchange2 direct true false false []
exchange.dlx direct true false false []
amq.headers headers true false false []
exchange.normal fanout true false false []
amq.direct direct true false false []
echange1 direct true false false []
exchange_async_confirm direct true false false []
amq.match headers true false false []
amq.topic topic true false false []
3、rabbitmqctl list_bindings [-p vhost] [bindinginfoitem ...]
返回绑定关系的详细信息,如果无 [-p vhost] 参数,将显示默认 vhost 为 "/" 中的绑定关系详情。bindinginfoitem 参数用于指示哪些信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。bindinginfoitem 的取值可以网上搜索。如果没有指定 bindinginfoitem,将显示所有的条目。示例如下:
root@wuychn:/# rabbitmqctl list_bindings -q
exchange queue.dlx queue queue.dlx []
exchange queue.normal queue queue.normal []
exchange queue1 queue queue1 []
exchange queue2 queue queue2 []
exchange queue_batch_async_confirm queue queue_batch_async_confirm []
exchange queue_batch_confirm queue queue_batch_confirm []
exchange queue_confirm queue queue_confirm []
exchange queue_demo queue queue_demo []
exchange queue_demo1 queue queue_demo1 []
exchange queue_demo2 queue queue_demo2 []
exchange queue_demo3 queue queue_demo3 []
exchange queue_demo5 queue queue_demo5 []
exchange queue_demo6 queue queue_demo6 []
exchange queue_tx queue queue_tx []
echange1 exchange queue1 queue routingkey1 []
exchange.dlx exchange queue.dlx queue routingkey []
exchange.normal exchange queue.normal queue []
exchange2 exchange queue2 queue routingkey2 []
exchange_async_confirm exchange queue_batch_async_confirm queue routing_async_confirm []
exchange_batch_confirm exchange queue_batch_confirm queue routing_batch_confirm []
exchange_confirm exchange queue_confirm queue routing_confirm []
exchange_demo exchange queue_demo queue routingkey_demo []
exchange_demo exchange queue_demo2 queue routingkey_demo []
exchange_demo exchange queue_demo3 queue routingkey_demo []
exchange_demo exchange queue_demo5 queue routingkey_demo []
exchange_demo exchange queue_demo6 queue routingkey_demo []
exchange_demo1 exchange queue_demo1 queue routingkey_demo1 []
exchange_tx exchange queue_tx queue routing_tx []
4、rabbìtmqctl lìst_connectìons [connectìonìnfoìtem ...]
返回 TCP/IP 连接的统计信息。connectioninfoitem 参数用于指示哪些信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。connectioninfoitem 的取值可以网上搜索。如果没有指定 connectioninfoitem,那么会显示 user、peer_host、peer_port 和 state 这几项信息。示例如下:
root@wuychn:/# rabbitmqctl list_connections -q
root@wuychn:/#
5、rabbitmqctl list_channels [channelinfoitem ...]
返回当前所有信道的信息。channelinfoitem 参数用于指示哪些信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。channelinfoitem 的取值可以网上搜索。如果没有指定 channelinfoitem,那么会显示 pid、user、consumer_count 和 messages_unacknowledged 这几项信息。示例如下:
root@wuychn:/# rabbitmqctl list_channels -q
root@wuychn:/#
6、rabbitmqctl list_consumers [-p vhost]
列举消费者信息。每行将显示由制表符分隔的己订阅队列的名称、相关信道的进程标识、consumerTag、是否需要消费端确认、prefetch_ count 及参数列表这些信息。示例如下:
root@wuychn:/# rabbitmqctl list_consumers -p default -q
root@wuychn:/#
7、rabbitmqctl status
显示 Broker 的状态,比如当前 Erlang 节点上运行的应用程序、RabbitMQ/Erlang 的版本信息、OS 的名称、内存及文件描述符等统计信息。示例如下:
root@wuychn:/# rabbitmqctl status
Status of node rabbit@wuychn
[{pid,8337},
{running_applications,
[{rabbitmq_management,"RabbitMQ Management Console","3.6.15"},
{rabbitmq_web_dispatch,"RabbitMQ Web Dispatcher","3.6.15"},
{cowboy,"Small, fast, modular HTTP server.","1.0.4"},
{rabbitmq_management_agent,"RabbitMQ Management Agent","3.6.15"},
{rabbit,"RabbitMQ","3.6.15"},
{cowlib,"Support library for manipulating Web protocols.","1.0.2"},
{amqp_client,"RabbitMQ AMQP Client","3.6.15"},
{rabbit_common,
"Modules shared by rabbitmq-server and rabbitmq-erlang-client",
"3.6.15"},
{os_mon,"CPO CXC 138 46","2.4.4"},
{mnesia,"MNESIA CXC 138 12","4.15.3"},
{ranch,"Socket acceptor pool for TCP protocols.","1.3.2"},
{ssl,"Erlang/OTP SSL application","8.2.3"},
{public_key,"Public key infrastructure","1.5.2"},
{asn1,"The Erlang ASN1 compiler version 5.0.4","5.0.4"},
{crypto,"CRYPTO","4.2"},
{inets,"INETS CXC 138 49","6.4.5"},
{compiler,"ERTS CXC 138 10","7.1.4"},
{recon,"Diagnostic tools for production use","2.3.2"},
{xmerl,"XML parser","1.3.16"},
{syntax_tools,"Syntax tools","2.1.4"},
{sasl,"SASL CXC 138 11","3.1.1"},
{stdlib,"ERTS CXC 138 10","3.4.3"},
{kernel,"ERTS CXC 138 10","5.4.1"}]},
{os,{unix,linux}},
{erlang_version,
"Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:64] [kernel-poll:true]\n"},
{memory,
[{connection_readers,0},
{connection_writers,0},
{connection_channels,0},
{connection_other,2744},
{queue_procs,17395288},
{queue_slave_procs,0},
{plugins,1615608},
{other_proc,21189904},
{metrics,226168},
{mgmt_db,289160},
{mnesia,119680},
{other_ets,1927952},
{binary,93392},
{msg_index,55200},
{code,24983634},
{atom,1041593},
{other_system,8989293},
{allocated_unused,17085296},
{reserved_unallocated,0},
{total,33230848}]},
{alarms,[]},
{listeners,[{clustering,25672,"::"},{amqp,5672,"::"},{http,15672,"::"}]},
{vm_memory_calculation_strategy,rss},
{vm_memory_high_watermark,0.4},
{vm_memory_limit,403495321},
{disk_free_limit,50000000},
{disk_free,11422547968},
{file_descriptors,
[{total_limit,924},{total_used,14},{sockets_limit,829},{sockets_used,0}]},
{processes,[{limit,1048576},{used,357}]},
{run_queue,0},
{uptime,2918},
{kernel,{net_ticktime,60}}]
8、rabbitmqctl node_health_check
对 RabbitMQ 节点进行健康检查,确认应用是否正常运行、list_queues 和 list_channels 是否能够正常返回等。示例如下:
root@wuychn:/# rabbitmqctl node_health_check
Timeout: 70.0 seconds
Checking health of node rabbit@wuychn
Health check passed
9、rabbitmqctl environment
显示每个运行程序环境中每个变量的名称和值。
10、rabbitmqctl report
为所有服务器状态生成一个服务器状态报告,并将输出重定向到一个文件。示例如下:
root@wuychn:/# rabbitmqctl report > /opt/report.txt
root@wuychn:/#
11、rabbitmqctl eval {expr}
执行任意 Erlang 表达式。
HTTP API 接口管理
RabbitMQ Management 插件不仅提供了 Web 管理界面,还提供了 HTTP API 接口来方便调用。比如创建一个队列,就可以通过 PUT 方法调用 /api/queues/vhost/name 接口来实现。