管理

本文是《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 接口来实现。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值