之前在学习RabbitMQ原理的时候,觉得RabbitMQ的启动、停止命令好坑,还有app_start、app_stop,到底用哪个启动呀?有什么区别和联系吗?本人在学习官方教程的过程中,做了这篇笔记。
一、rabbitmq-server
这是第一个命令,也是最简单的,仅有一个可选项 -detached (这个地方不太容易记忆,detached英文释义:分离,这个以deamon的形式运行,有半毛钱关系呀)
带-detached和不带的区别:
- 带-detached,以deamon的形式运行。
- 不带-detached,在前端运行,这里有一个好处,如果在启动过程出错(配置文件错误等),能在前端看到错误信息,而带-detached则看不到,所以一般用于调试。
备注:
坑1:使用-detached,会有一个警告:Warning: PID file not written; -detached was passed. 坑2:cat /run/rabbit.pid 和ps aux | grep rabbit的进程id不一致。
二、rabbitmqctl
rabbitmqctl [-n node] [-t timeout] [-q] {command} [command options...]
-t、-q,这两个可忽略,主要是 -n
Application and Cluster Management
stop [pid_file]
停止整个rabbit服务,包括kill erl进程,stop后的日志,请与stop_app比较
=INFO REPORT==== 24-Jan-2017::01:52:14 === Stopping RabbitMQ =INFO REPORT==== 24-Jan-2017::01:52:14 === stopped TCP Listener on 192.168.80.122:5672 =INFO REPORT==== 24-Jan-2017::01:52:14 === Stopped RabbitMQ application =INFO REPORT==== 24-Jan-2017::01:52:14 === Halting Erlang VM #这里可以看出与stop_app的区别,stop是要关闭erlang VM的,而stop_app则不关闭erlang VM
stop_app
停止应用,但erlang的进程依旧在运行。看一下执行stop_app的命令的日志就明白了
=INFO REPORT==== 24-Jan-2017::01:00:02 === webmachine_log_handler: closing log file: "/var/log/rabbitmq/management.log/access.log" =INFO REPORT==== 24-Jan-2017::01:00:02 === opening log file: "/var/log/rabbitmq/management.log/access.log.2017_01_24_01" =INFO REPORT==== 24-Jan-2017::01:00:04 === Stopping RabbitMQ =INFO REPORT==== 24-Jan-2017::01:00:04 === stopped TCP Listener on 192.168.80.122:5672 =INFO REPORT==== 24-Jan-2017::01:00:04 === Stopped RabbitMQ application
start_app
启动rabbitMQ的应用,如下启动日志。
=INFO REPORT==== 24-Jan-2017::01:22:08 === HiPE in use: modules already natively compiled. =INFO REPORT==== 24-Jan-2017::01:22:08 === Starting RabbitMQ 3.6.6 on Erlang 19.0.4 Copyright (C) 2007-2016 Pivotal Software, Inc. Licensed under the MPL. See http://www.rabbitmq.com/ =INFO REPORT==== 24-Jan-2017::01:22:08 === node : host122@localhost home dir : /root config file(s) : /usr/local/rabbitmq/etc/rabbitmq.conf.config cookie hash : WtllLcdu3Yla+EIL+bjctQ== log : /var/log/rabbitmq/host122.log sasl log : /var/log/rabbitmq/host122-sasl.log database dir : /data/rabbitmq/host122 =INFO REPORT==== 24-Jan-2017::01:22:08 === Memory limit set to 736MB of 1840MB total. =INFO REPORT==== 24-Jan-2017::01:22:08 === Disk free limit set to 100MB =INFO REPORT==== 24-Jan-2017::01:22:08 === Limiting to approx 524188 file handles (471767 sockets) =INFO REPORT==== 24-Jan-2017::01:22:08 === FHC read buffering: OFF FHC write buffering: ON =INFO REPORT==== 24-Jan-2017::01:22:08 === Starting rabbit_node_monitor =INFO REPORT==== 24-Jan-2017::01:22:08 === Management plugin: using rates mode 'basic' =INFO REPORT==== 24-Jan-2017::01:22:08 === msg_store_transient: using rabbit_msg_store_ets_index to provide index =INFO REPORT==== 24-Jan-2017::01:22:08 === msg_store_persistent: using rabbit_msg_store_ets_index to provide index =INFO REPORT==== 24-Jan-2017::01:22:08 === started TCP Listener on 192.168.80.122:5672 =INFO REPORT==== 24-Jan-2017::01:22:08 === opening log file: "/var/log/rabbitmq/management.log/access.log.2017_01_24_01" =INFO REPORT==== 24-Jan-2017::01:22:08 === Management plugin started. Port: 15672 =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics event collector started. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics channel stats collector started. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics queue stats collector started. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics database started. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_queue_stats_fine_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_queue_stats_deliver_get with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_queue_stats_queue_msg_counts with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_queue_stats_queue_msg_rates with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_queue_stats_process_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_queue_exchange_stats_fine_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_vhost_stats_deliver_get with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_vhost_stats_fine_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_vhost_stats_queue_msg_rates with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_vhost_stats_queue_msg_counts with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_vhost_stats_coarse_conn_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_channel_queue_stats_deliver_get with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_channel_queue_stats_fine_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_channel_queue_stats_queue_msg_counts with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_channel_stats_deliver_get with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_channel_stats_fine_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_channel_stats_queue_msg_counts with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_channel_stats_process_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_channel_exchange_stats_deliver_get with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_channel_exchange_stats_fine_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_exchange_stats_fine_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_node_stats_coarse_node_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_node_node_stats_coarse_node_node_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_connection_stats_coarse_conn_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table aggr_connection_stats_process_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table channel_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Statistics garbage collector started for table connection_stats with interval 5000. =INFO REPORT==== 24-Jan-2017::01:22:08 === Server startup complete; 6 plugins started. * rabbitmq_management * rabbitmq_web_dispatch * webmachine * mochiweb * rabbitmq_management_agent * amqp_client
wait {pid_file}
根据官方的解释:等待RabbitMQ application启动.此命令用来等待RabbitMQ application来启动node。它会等待创建pid文件,然后等待pid文件中的特定pid过程启动,最后等待RabbitMQ application 来启动node. pid file是通过rabbitmq-server 脚本来创建的.默认情况下,它存放于Mnesia目录中. 修改RABBITMQ_PID_FILE 环境变量可以改变此位置。如:
rabbitmqctl wait /var/run/rabbitmq/pid
此命令会在RabbitMQ node启动后返回。但本人尝试了下,无尽的等待中。。。这个等高人解释吧。
reset、force_reset
将RabbitMQ node还原到最初状态.包括从所在群集中删除此node,从管理数据库中删除所有配置数据,如已配置的用户和虚拟主机,以及删除所有持久化消息.执行reset和force_reset之前,必须停止RabbitMQ application ,如使用stop_app.一般情况下force_reset仅限节点故障时使用。
rotate_logs {suffix}
这个可以和crontab结合,将rabbmit的日志文件按日期存放。
例如:
# rabbitmqctl rotate_logs .2017-01-25 #将当前的日志文件,命名成host122.log.2017-01-25,并创建新的host122.log
=============================================================================
User management
用户的管理命令无非就是添、删、改、查、加权限,这里不细说。
- add_user {username} {password}
- delete_user {username}
- change_password {username} {newpassword}
- clear_password {username}
- authenticate_user {username} {password}
//这个比较难记忆,但用的也少哈.
- set_user_tags {username} {tag …}
//给用户添加标签,在RabbitMQ中称对标签,有5种可选的标签
none、management、policymaker、monitoring、administrator
rabbitmqctl set_user_tags tonyg administrator rabbitmqctl set_user_tags tony //清空用户tony的所有标签
- list_users
=============================================================================
Access control
- add_vhost {vhost}
- delete_vhost {vhost}
- list_vhosts [vhostinfoitem …]
#参数 vhostinfoitem 主要用于对list结果的筛选,可选name:vhost名称,tracing:是否对虚拟主机启用追踪
- set_permissions [-p vhost] {user} {conf} {write} {read}
vhost:授予用户可访问的虚拟机名称,默认是/. user:可访问指定虚拟主机的用户名称. conf:一个用于匹配用户在哪些资源名称上拥有配置权限的正则表达式 write:一个用于匹配用户在哪些资源名称上拥有写权限的正则表达式. read:一个用于匹配用户在哪些资源名称上拥有读权限的正则表达式. 设置用户权限. 例如: rabbitmqctl set_permissions -p /myvhost tonyg "^tonyg-.*" ".*" ".*" 此命令表示RabbitMQ broker授予tonyg 用户可访问 /myvhost虚拟主机, 并在资源名称以"tonyg-"开头的所有资源上都具有配置权限,并在所有资源上都拥有读写权限。
- clear_permissions [-p vhost] {username}
vhost:用于设置禁止用户访问的虚拟主机名称,默认为/. username:禁止访问特定虚拟主机的用户名称. 设置用户权限. 例如: rabbitmqctl clear_permissions -p /myvhost tonyg 此命令用于指示RabbitMQ broker禁止tonyg 用户访问/myvhost虚拟主机
- list_permissions [-p vhost]
vhost:用于指定虚拟主机名称,将会列出所有可访问此虚拟主机的所有用户名称和权限.默认为/. 显示虚拟机上权限. 例如: rabbitmqctl list_permissions -p /myvhost 此命令指示RabbitMQ broker列出所有已授权访问/myvhost 虚拟主机的用户, 同时也会列出这些用户能在虚拟主机资源可操作的权限.注意,空字符串表示没有任何授予的权限。
- list_user_permissions {username}
username 要显示权限的用户名称. 列出用户权限. 例如: rabbitmqctl list_user_permissions tonyg 此命令指示RabbitMQ broker列出tonyg可授权访问的所有虚拟主机名称,以及在这些虚拟主机上的操作.
=============================================================================
Cluster management – 集群管理
- join_cluster {clusternode} [–ram]
clusternode:加入集群的节点. [--ram] 如果进行了设置,节点将以RAM节点身份加入集群. 指导节点成为集群中的一员. 在加入集群之前,节点会重置,因此在使用此命令时,必须小心. 这个命令要成功,RabbitMQ应用程序必须先停止,如stop_app. 集群节点可以是两种类型: 磁盘节点(Disc Node) 或 内存节点(RAM Node).磁盘节点会在RAM和磁盘中复制数据, 通过冗余可以防止节点失效事件,并可从断电这种全局事件中进行恢复. RAM节点只在RAM中复制数据(除了队列的内容外,还依赖于队列是否是持久化的或者内容对于内存来说是否过大) , 并主要用于可伸缩性. RAM节点只有当管理资源(如,增加/删除队列,交换机,或绑定)的时候才具有更高的性能. 一个集群必须至少有一个磁盘节点,通常来说还不止一个. 默认情况下,节点是磁盘节点.如果你想要创建内存节点,需要提供--ram 标志. 在执行cluster命令之后, 无论何时,当前节点上启动的RabbitMQ 应用程序在节点宕机的情况下, 会尝试连接集群中的其它节点。 要脱离集群, 必须重设(reset)节点. 你也可以通过forget_cluster_node 命令来远程删除节点. 更多详情,参考集群指南. 例如: rabbitmqctl join_cluster hare@elena --ram 此命令用于指示RabbitMQ node以ram节点的形式将 hare@elena 加入集群.
- cluster_status
按节点类型来分组展示集群中的所有节点,包括当前运行的节点.
例如: rabbitmqctl cluster_status 此命令会显示集群中的所有节点.
- change_cluster_node_type {disc | ram}
修改集群节点的类型. 要成功执行此操作,必须首先停止节点,要将节点转换为RAM节点,则此节点不能是集群中的唯一disc节点。
例如: rabbitmqctl change_cluster_node_type disc 此命令会将一个RAM节点转换为disc节点.
- forget_cluster_node [–offline] ,使用方法参考下面的例子
[--offline]
允许节点从脱机节点中删除. 这只在所有节点都脱机且最后一个掉线节点不能再上线的情况下有用,
从而防止整个集群从启动。它不能使用在其它情况下,因为这会导致不一致.
远程删除一个集群节点.要删除的节点必须是脱机的, 而在删除节点期间节点必须是在线的,
除非使用了--offline 标志.
当使用--offline 标志时,rabbitmqctl不会尝试正常连接节点;
相反,它会临时改变节点以作修改.如果节点不能正常启动的话,这是非常有用的.
在这种情况下,节点将变成集群元数据的规范源(例如,队列的存在),即使它不是以前的。
因此,如果有可能,你应该在最新的节点上使用这个命令来关闭。
例如:
rabbitmqctl -n hare@mcnulty forget_cluster_node rabbit@stringer
此命令会从节点hare@mcnulty中删除rabbit@stringer节点.
- rename_cluster_node {oldnode1} {newnode1} [oldnode2] [newnode2 …]
支持在本地数据库中重命名集群节点. 此子命令会促使rabbitmqctl临时改变节点以作出修改. 因此本地集群必须是停止的,其它节点可以是在线或离线的. 这个子命令接偶数个参数,成对表示节点的旧名称和新名称.你必须指定节点的旧名称和新名称, 因为其它停止的节点也可能在同一时间重命名. 同时停止所有节点来重命名也是可以的(在这种情况下,每个节点都必须给出旧名称和新名称)或一次停止一个节点 来重命名(在这种情况下,每个节点只需要被告知其名句是如何变化的). 例如: rabbitmqctl rename_cluster_node rabbit@misshelpful rabbit@cordelia 此命令来将节点名称rabbit@misshelpful 重命名为rabbit@cordelia.
- update_cluster_nodes {clusternode}
clusternode:用于咨询具有最新消息的节点.
指示已集群的节点醒来时联系clusternode.这不同于join_cluster ,因为它不会加入任何集群 – 它会检查节点已经以clusternode的形式存在于集群中了.
需要这个命令的动机是当节点离线时,集群可以变化.考虑这样的情况,节点A和节点B都在集群里边,这里节点A掉线了,C又和B集群了,然后B又离开了集群.当A醒来的时候,它会尝试联系B,但这会失败,因为B已经不在集群中了.update_cluster_nodes -n A C 可解决这种场景.
- force_boot
确保节点将在下一次启动,即使它不是最后一个关闭的。通常情况下,当你关闭整个RabbitMQ 集群时,你重启的第一个节点应该是最后一个下线的节点,因为它可以看到其它节点所看不到的事情. 但有时这是不可能的:例如,如果整个集群是失去了电力而所有节点都在想它不是最后一个关闭的.
在这种节点掉线情况下,你可以调用rabbitmqctl force_boot .这就告诉节点下一次无条件的启动节点.在此节点关闭后,集群的任何变化,它都会丢失.
如果最后一个掉线的节点永久丢失了,那么你需要优先使用rabbitmqctl forget_cluster_node –offline, 因为它可以确保在丢失的节点上掌握的镜像队列得到提升。
例如:
rabbitmqctl force_boot
这可以强制节点下次启动时不用等待其它节点.
- sync_queue [-p vhost] {queue}
queue:同步队列的名称
指示未同步slaves上的镜像队列自行同步.同步发生时,队列会阻塞(所有出入队列的发布者和消费者都会阻塞).此命令成功执行后,队列必须是镜像的.
注意,未同步队列中的消息被耗尽后,最终也会变成同步. 此命令主要用于未耗尽的队列
- cancel_sync_queue [-p vhost] {queue}
queue:取消同步的队列名称.
指示同步镜像队列停止同步.
- purge_queue [-p vhost] {queue}
queue:要清除队列的名称.
清除队列(删除其中的所有消息).
- set_cluster_name {name}
设置集群名称. 集群名称在client连接时,会通报给client,也可用于federation和shovel插件记录消息的来源地. 群集名称默认是来自在群集中的第一个节点的主机名,但可以改变。
例如:
rabbitmqctl set_cluster_name london
设置集群名称为”london”.
=============================================================================
Parameter Management – 参数管理
RabbitMQ的某些特性(如联合插件)是动态控制的. 每个参数都是与特定虚拟主机相关的组件名称, name和value构成的. 组件名称和name都是字符串,值是Erlang term. 参数可被设置,清除和显示.通常你可以参考文档来了解如何设置参数.
- set_parameter [-p vhost] {component_name} {name} {value}
- clear_parameter [-p vhost] {component_name} {key}
- list_parameters [-p vhost]
=============================================================================
Policy Management – 策略管理
策略用于在集群范围的基础上用于控制和修改队列和交换机的行为. 策略应用于虚拟主机,由name, pattern, definition或可选的priority组成. 策略可被设置,清除和列举.
- set_policy [-p vhost] [–priority priority] [–apply-to apply-to] {name} {pattern} {definition}
#设置策略.
name:策略名称.
pattern:正则表达式, 匹配要应用的资源
definition:策略的定义,JSON形式.在大多数shells中,你很可能需要引用这个
priority:策略的整数优先级. 数字越高则优先级越高.默认是0.
apply-to:策略适用的对象类型,其值可为 "queues", "exchanges" 或 "all".默认是"all".
例如:
rabbitmqctl set_policy federate-me "^amq." '{"federation-upstream-set":"all"}'
此命令在默认虚拟主机上设置策略为federate-me,这样内建的交换器将进行联合.
#设置镜像节点
rabbitmqctl set_policy -p wanda ha-all "^" '{"ha-mode":"all"}'
- clear_policy [-p vhost] {name}
清除策略.
name:要清除的策略名称. 例如: rabbitmqctl clear_policy federate-me 此命令来清除默认虚拟主机上的federate-me 策略.
- list_policies [-p vhost]
显示虚拟主机上的所有策略.
例如: rabbitmqctl list_policies 此命令会显示默认虚拟主机上的所有策略.
=============================================================================
Server Status – 服务器状态
服务器状态查询查询服务器返回一个结果以制表符分隔的列表. 某些查询(list_queues, list_exchanges, list_bindings, 和 list_consumers) 接受一个可选的vhost 参数. 如果这个参数出现了,那么它必须指定在查询的后面.
list_queues, list_exchanges and list_bindings 命令接受一个可选的虚拟主机参数以显示其结果.默认值为”/”.
- list_queues [-p vhost] [queueinfoitem …]
返回队列的详细信息. 如果无-p标志,将显示/虚拟主机上的队列详情.”-p” 标志可用来覆盖此默认值.
queueinfoitem 参数用于指示哪些队列信息项会包含在结果集中.结果集的列顺序将匹配参数的顺序.queueinfoitem 可以是下面列表中的任何值: name:非ASCII字符的队列名称. durable:服务器重启后,队列是否能幸存. auto_delete:不再使用时,是否需要自动删除队列. arguments 队列参数. policy:应用到队列上的策略名称. pid:关联队列的Erlang进程ID. owner_pid:表示队列专用所有者的代表连接的Erlang进程ID.如果队列是非专用的,此值将为空. exclusive:True:如果队列是专用的(即有owner_pid), 反之false exclusive_consumer_pid:表示此channel的专用消费者订阅到此队列的Erlang进程Id. 如果没有专用消费者,则为空. exclusive_consumer_tag:专用消费者订阅到此队列的Consumer tag.如果没有专用消费者,则为空. messages_ready:准备分发给客户端的消息数目. messages_unacknowledged:分发到客户端但尚未应答的消息数目. messages:准备分发和未应答消息的总和(队列深度). messages_ready_ram:驻留在ram中messages_ready的消息数目. messages_unacknowledged_ram:驻留在ram中messages_unacknowledged的消息数目. messages_ram:驻留在ram中的消息总数. messages_persistent:队列中持久化消息的数目(对于瞬时队列总是0). message_bytes:队列中所有消息体的大小总和.这不包括消息属性(包括headers) 或任何开销(overhead)。 message_bytes_ready:类似于message_bytes ,但只统计准备投递给clients的那些消息. message_bytes_unacknowledged:类似于message_bytes ,但只统计那些已经投递给clients但还未应答的消息 message_bytes_ram:类似于message_bytes ,但只统计那些在RAM中的消息 message_bytes_persistent:类似于message_bytes ,但只统计那些持久化的消息 head_message_timestamp:如果存在,只显示队列中第1个消息的timestamp属性. 消息的时间戳只出现在分页情况下. disk_reads:从队列启动开如,已从磁盘上读取该队列的消息总次数. disk_writes:从队列启动开始,已向磁盘队列写消息总次数. consumers:消费者数目. consumer_utilisation:时间分数(0.0与1.0之间),队列可立即向消费者投递消息. 它可以小于1.0,如果消费者受限于网络堵塞或预提取数量. memory:与队列相关的Erlang进程消耗的内存字节数,包括栈,堆以及内部结构. slave_pids:如果队列是镜像的,这里给出的是当前slaves的IDs. synchronised_slave_pids:如果队列是镜像的,当前slaves的IDs是master同步的- 即它们可在无消息丢失的情况下,接管master. state:队列状态.正常情况下是'running', 但如果队列正在同步也可能是"{syncing, MsgCount}". 处于集群下的节点如果掉线了,队列状态交显示'down' (大多数queueinfoitems 将不可用). 如果没有指定queueinfoitems,那么将显示队列名称和队列深度. 例如: rabbitmqctl list_queues -p /myvhost messages consumers 此命令显示了/myvhost虚拟主机中每个队列的深度和消费者数目.
- list_exchanges [-p vhost] [exchangeinfoitem …]
返回交换器细节.如果没有指定"-p"选项,将返回 / 虚拟主机的细节. "-p" 选项可用来覆盖默认虚拟主机. exchangeinfoitem 参数用来表示哪些交换器信息要包含在结果中. 结果集中列的顺序将与参数顺序保持一致. exchangeinfoitem 可接受下面的列表中任何值: name:交换器名称. type:交换器类型(如[direct, topic, headers, fanout]). durable:当服务器重启时,交换器是否能复活. auto_delete:当不再使用时,交换器是否需要自动删除. internal:交换器是否是内部的,即不能由client直接发布. arguments:交换器参数 policy:应用到交换器上的策略名称. 如果没有指定exchangeinfoitems,那么将会显示交换器类型和类型 例如: rabbitmqctl list_exchanges -p /myvhost name type 此命令会显示/myvhost中每个交换器的名称和类型.
- list_bindings [-p vhost] [bindinginfoitem …]
返回绑定细节.默认情况下返回的是 / 虚拟主机上的绑定详情.可使用”-p” 标记来覆盖默认虚拟主机.
bindinginfoitem 参数用来表示结果中包含哪些绑定信息. 结果集中列的顺序将匹配参数的顺序. bindinginfoitem可接受下面列表的任意值: source_name:绑定中消息来源的名称. C中非ASCII转义字符. source_kind:绑定中消息来源的类别.当前总是exchange. C中非ASCII转义字符. destination_name:绑定中消息目的地名称.C中非ASCII转义字符. destination_kind:绑定中消息目的地的种类. C中非ASCII转义字符. routing_key:绑定的路由键,C中非ASCII转义字符. arguments:绑定参数. 如果没有指定bindinginfoitems,将会显示所有上述条目. 例如: rabbitmqctl list_bindings -p /myvhost exchange_name queue_name 此命令来显示/myvhost虚拟主机上绑定的交换器名称和队列名称.
- list_connections [connectioninfoitem …]
返回TCP/IP连接统计.
connectioninfoitem 参数用来表示在结果中包含哪些连接信息. 结果集中列的顺序将匹配参数的顺序. connectioninfoitem可接受下面列表的任意值: pid:与连接相关的Erlang进程ID. name:连接的可读名称. port:服务器端口. host:返回反向DNS获取的服务器主机名称,或 IP地址(反向DNS解析失败) 或者未启用. peer_port:Peer 端口. peer_host:返回反向DNS获取的Peer主机名称,或 IP地址(反向DNS解析失败) 或者未启用. ssl:用Boolean来表示连接是否是SSL的. ssl_protocol:SSL 协议(如. tlsv1) ssl_key_exchange:SSL key exchange 算法 (如 rsa) ssl_cipher:SSL cipher 算法 (如aes_256_cbc) ssl_hash:SSL hash 函数 (如 sha) peer_cert_subject:peer的 SSL 安全证书的主体, RFC4514形式. peer_cert_issuer:peer的 SSL安全证书的发行者, RFC4514 形式. peer_cert_validity:peer的SSL安全证书的有效期. state:连接状态(可为[starting, tuning, opening, running, flow, blocking, blocked, closing, closed]其中一个). channels:使用连接的channel数。 protocol:使用的AMQP协议版本(当前是{0,9,1} 或{0,8,0}). 注意,如果client请求的是AMQP 0-9 连接, 我们会视为AMQP 0-9-1. auth_mechanism:使用的SASL认证机制,如PLAIN. user:与连接相关的用户名 vhost:虚拟主机名称,C中非ASCII转义字符. timeout:连接超时/协商的心跳间隔,秒为单位. frame_max:最大 frame 大小(字节). channel_max:此连接上channel的最大数目. client_properties:连接建立期间由client发送的信息属性. recv_oct:Octets已收到. recv_cnt:Packets 已收到. send_oct:Octets 发送. send_cnt:Packets 发送. send_pend:发送队列大小. connected_at:连接建立的日期和时间,当作timestamp. 如果没有connectioninfoitems, 那么会显示user, peer host, peer port,流量控制和内存块状态的时间 例如: rabbitmqctl list_connections send_pend port 此命令会显示发送队列的大小以及第个连接的服务器端口.
- list_channels [channelinfoitem …]
返回所有当前channel上的信息,逻辑容器执行大部分 AMQP命令.这将包含最初AMQP连接的部分,以及不同插件和其它扩展创建的channels.
channelinfoitem 参数用来表示在结果集中包含哪些channel信息.结果集中列的顺序将匹配参数的顺序. channelinfoitem 可接受下面列表中的任何一个参数: pid:与连接相关的Erlang进程ID. connection:channel所属的连接Erlang进程ID. name:channel的可读名称. number:channel的数目,在一个连接中,它有唯一的标识符. user:与channel相关的用户名称. vhost:channel操作的虚拟主机. transactional:True:如果channel处于事务模式,其它情况为false. confirm:True:如果channel是确认模式,其它情况为false. consumer_count:在channel中接收消息的逻辑AMQP消费者数目. messages_unacknowledged:在channel中消息已投递但还未应答的消息数目. messages_uncommitted:在channel中已收到消息但还没有提交事务的消息个数. acks_uncommitted:确认收到一个还未提交的事务数。 messages_unconfirmed:尚未确认已发布消息的数目。在通道不在确认模式下时,这将是0。 prefetch_count:新消费者QoS预提取限制, 0表示无上限. global_prefetch_count:整个channel QoS预提取限制, 0表示无上限. 如果没有指定channelinfoitems,那么将显示pid, user, consumer_count,messages_unacknowledged. 例如: rabbitmqctl list_channels connection messages_unacknowledged 此命令会显示每个channel中连接进程和未应答消息的数目.
- list_consumers [-p vhost]
列举消费者, 即订阅队列的消息流. 每行将打印出由制表符分隔的已订阅队列的名称,创建并管理订阅的channel进程的标识,channel中订阅的consumer tag唯一标识符, boolean值表示投递到此消费者的消息是否需要应答,整数值表示表示预提取限制(为0表示无限制), 以及关于此消费者的任何其它参数.
- status
显示 broker 状态信息,如当前Erlang节点上运行的应用程序, RabbitMQ 和 Erlang 的版本信息, OS 名称, 内存和文件描述符统计信息. (查看cluster_status 命令来找出那些节点是集群化的以及正在运行的.)
例如: rabbitmqctl status 此命令显示了RabbitMQ broker的相关信息.
- environment
显示每个运行程序环境中每个变量的名称和值.
- report
为所有服务器状态生成一个服务器状态报告,输出应该重定向到一个文件.
例如:
rabbitmqctl report > server_report.txt
此命令创建了一个服务器报告,可将它附着在支持请求的电子邮件中.
- eval {expr}
执行任意Erlang表达式.
例如: rabbitmqctl eval 'node().' 此命令用于返回rabbitmqctl连接的节点名称
Miscellaneous – 其他
- close_connection {connectionpid} {explanation}
connectionpid:要关闭的与连接相关的Erlang进程ID. explanation:解释字符串.
指示broker关闭与Erlang进程id相关的连接(可通过list_connections 命令查看), 通过为连接客户端传递解释字符串(作为AMQP连接关闭协议的一部分). 例如: rabbitmqctl close_connection "<rabbit@tanto.4262.0>" "go away" 此命令指示RabbitMQ broker关闭与Erlang 进程id<rabbit@tanto.4262.0>相关联的连接, 同时向客户端传递go away字符串.
- trace_on [-p vhost]
vhost:要开启追踪的虚拟主机的名称. 开启追踪.注意,追踪状态不是持久化的; 如果服务器重启,追踪状态将会丢失.
- trace_off [-p vhost]
vhost:要停止追踪的虚拟主机名称. 停止追踪.
- set_vm_memory_high_watermark {fraction}
fraction 当一个浮点数大于或等于0时,会触发流量控制新内存阈值部分。
- set_vm_memory_high_watermark absolute {memory_limit}
memory_limit 流程控制触发的新内存限制, 以字节来表示大于或等于0的整数或以字符串和内存单位来表示(如 512M或1G). 可用的单位是: k, kiB: kibibytes (2^10 bytes) M, MiB: mebibytes (2^20) G, GiB: gibibytes (2^30) kB: kilobytes (10^3) MB: megabytes (10^6) GB: gigabytes (10^9)
- set_disk_free_limit {disk_limit}
disk_limit:以整数或字符串单位的可用磁盘下限限制(查看vm_memory_high_watermark), 如 512M or 1G. 一旦可用磁盘空间达到这个限制,就会设置磁盘报警.
- set_disk_free_limit mem_relative {fraction}
fraction 相对于整个可用内存的限制,其值为非负浮点数. 当值小于1.0时是很危险的,应该谨慎使用.