介绍RabbitMQ服务端命令的使用方法与作用。
rabbitmq-server
RabbitMQ节点一般指RabbitMQ应用程序和其所在的Erlang节点,当运行在Erlang节点上的应用程序崩溃时,Erlang会自动尝试重启应用程序(如果Erlang本身没有崩溃)。
启动节点
#前台启动
rabbitmq-server
#后台启动(守护进程)
rabbitmq-server -detached
#增加启动变量
RABBITMQ_NODE_PORT=5673 rabbitmq-server -detached
关闭
#只关闭应用程序,可用于加入及退出集群的操作
[root@vagrant rabbitmq]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@vagrant ...
#关闭整个节点
[root@vagrant rabbitmq]# rabbitmqctl stop
Stopping and halting node rabbit@vagrant ...
rabbitmqctl
此命令用于管理RabbitMQ节点。
#可在指定节点上执行命令
rabbitmqctl -n nodename commond
Tips:如下有些命令,在低版本里会没有。
集群管理
join_cluster
将当前节点添加到集群中,使用此命令前需要先停止节点应用。
- clusternode:现有集群中的任意节点
- –ram:标记新加入的节点是否为内存节点,默认为磁盘节点
#命令格式
join_cluster clusternode [--ram]
#示例
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@DEV-HROEx64
rabbitmqctl start_app
cluster_status
查看集群状态。
#命令格式
cluster_status
#示例
rabbitmqctl cluster_status
change_cluster_node_type
修改集群节点类型,使用此命令前需要先停止节点应用。
- type:disc或ram
#命令格式
change_cluster_node_type type
#示例
rabbitmqctl stop_app
rabbitmqctl change_cluster_node_type disc
rabbitmqctl start_app
forget_cluster_node
远程从集群中移除节点,被移除的节点需要处于离线状态,操作的节点需要处于在线状态,除非使用--offline
参数。
- –offline:允许从离线节点中远程删除其它节点
#命令格式
forget_cluster_node [--offline]
#示例
rabbitmqctl forget_cluster_node rabbit@DEV-mHRO
sync_queue
同步集群中状态为未同步的队列,此命令将导致队列阻塞,发布者与消费者将不能使用此队列。
如果未同步的队列有正常消费者消费消息的话,队列最终会变为同步的。此命令主要用于不活动的队列。
#命令格式
sync_queue [-p vhost] queue
#示例
rabbitmqctl sync_queue jobseek_confirm_type1
cancel_sync_queue
停止队列的同步。
#命令格式
cancel_sync_queue [-p vhost] queue
#示例
rabbitmqctl cancel_sync_queue jobseek_confirm_type1
purge_queue
清空队列中的消息。
#命令格式
purge_queue [-p vhost] queue
#示例
rabbitmqctl purge_queue jobseek_confirm_type1
用户管理
add_user
添加用户并设置初始密码。
#命令格式
add_user username password
#示例
rabbitmqctl add_user user_test 123456
delete_user
删除用户。
#命令格式
delete_user username
#示例
rabbitmqctl delete_user user_test
change_password
修改用户的密码。
#命令格式
change_password username newpassword
#示例
rabbitmqctl change_password user_test 654321
clear_password
删除用户的密码。此操作会导致用户使用密码不能登录(除非使用其他配置登录,如SASL EXTERNAL)。
#命令格式
clear_password username
#示例
rabbitmqctl clear_password user_test
authenticate_user
验证用户名与密码是否匹配。
#命令格式
authenticate_user username password
#示例
rabbitmqctl authenticate_user user_test 123456
set_user_tags
设置用户角色,同时会清除现有的所有设置。
- management:普通管理者,仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理
- policymaker:策略制定者,可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理
- monitoring:监控者,可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
- administrator:超级管理员,可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作
#命令格式
set_user_tags username [tag ...]
#示例
rabbitmqctl set_user_tags user_test administrator
list_users
显示所有用户及用户的角色。
#命令格式
rabbitmqctl list_users
#示例
rabbitmqctl list_users
访问控制
add_vhost
创建新的虚拟主机
#命令格式
add_vhost vhost
#示例
rabbitmqctl add_vhost test
delete_vhost
删除已有的虚拟主机,同时会删除虚拟主机中的交换器、队列、绑定、用户权限、参数和策略。
#命令格式
delete_vhost vhost
#示例
rabbitmqctl delete_vhost test
list_vhosts
显示所有主机信息,vhostinfoitem可为{name,tracing}
#命令格式
list_vhosts [vhostinfoitem ...]
#示例
rabbitmqctl list_vhosts name tracing
set_permissions
将虚拟主机指派给用户,同时设置相应权限。资源一般可理解为队列,交换器等。
- [-p vhost]:需要指派的主机名称,默认为“/”
- user:需要指派的用户
- conf:用户可配置(交换器与队列的新建或删除)的资源名称,使用正则表达式匹配
- write:用户可写(发布消息,需要绑定成功)的资源名称,使用正则表达式匹配
- read:用户可读(消息的操作,需要绑定成功)的资源名称,使用正则表达式匹配
如下为不同AMQP命令对应的权限
AMQP命令 | 配置 | 写 | 读 |
---|---|---|---|
exchange.declare | exchange | ||
exchange.delete | exchange | ||
queue.declare | queue | ||
queue.delete | queue | ||
queue.bind | queue | exchange | |
basic.publish | exchange | ||
basic.get | queue | ||
basic.consume | queue | ||
queue.purge | queue |
#命令格式
set_permissions [-p vhost] user conf write read
#示例
rabbitmqctl set_permissions -p vhost-test user-test ".*" ".* ".*"
clear_permissions
移除用户的在某个虚拟主机上的权限。
#命令格式
clear_permissions [-p vhost] username
#示例
rabbitmqctl clear_permissions -p vhost_test user_test
list_permissions
显示某虚拟主机下的用户及用户的权限。
#命令格式
list_permissions [-p vhost]
#示例
rabbitmqctl list_permissions -p vhost_test
list_user_permissions
显示用户所关联的虚拟主机及相应的权限。
#命令格式
list_user_permissions username
#示例
rabbitmqctl list_user_permissions user_test
set_topic_permissions
设置用户在虚拟主机中对于某个主题交换器,可发布或获取消息的routing key。
- [-p vhost]:需要指派的主机名称,默认为“/”
- user:需要指派的用户
- exchange:用户可配置的资源名称,使用正则表达式匹配
- write:用户发布消息的routing key,使用正则表达式匹配
- read:用户获取消息的routing key,使用正则表达式匹配
#命令格式
set_topic_permissions [-p vhost] user exchange write read
#示例
rabbitmqctl set_topic_permissions -p vhost_test user_test amq.topic "^xpz-.*" "^xpz-.*"
clear_topic_permissions
清除用户在主题交换器上的权限限制。
#命令格式
clear_topic_permissions [-p vhost] username [exchange]
#示例
rabbitmqctl clear_topic_permissions -p vhost_test user_test amq.topic
list_topic_permissions
显示虚拟主机上所有用户的主题权限限制。
#命令格式
list_topic_permissions [-p vhost]
#示例
rabbitmqctl list_topic_permissions -p vhost_test
list_topic_user_permissions
显示用户所关联的虚拟主机及相应的主题权限限制。
#命令格式
list_user_topic_permissions username
#示例
rabbitmqctl list_topic_user_permissions user_test
虚拟主机限制
set_vhost_limits
对虚拟主机设置某些限制。
definition为json格式的字符串,当值为负数时表示不做任何限制。
- max-connections:设置最大连接数
- max-queues:设置最多队列数
#命令格式
set_vhost_limits [-p vhost] definition
#示例
#设置最大连接数为64
rabbitmqctl set_vhost_limits -p vhost_test '{"max-connections": 64}'
#设置最多队列数为256
rabbitmqctl set_vhost_limits -p vhost_test '{"max-queues": 256}'
#设置最大连接数为不受限
rabbitmqctl set_vhost_limits -p vhost_test '{"max-connections": -1}'
#设置最大连接数为0,不允许任何连接进来
rabbitmqctl set_vhost_limits -p vhost_test '{"max-connections": 0}'
clear_vhost_limits
清除虚拟主机上的限制。
#命令格式
clear_vhost_limits [-p vhost]
#示例
rabbitmqctl clear_vhost_limits -p vhost_test
list_vhost_limits
清除虚拟主机上的限制。
#命令格式
list_vhost_limits [-p vhost] [--global]
#示例
#显示指定虚拟主机
rabbitmqctl list_vhost_limits -p vhost_test
#显示所有虚拟主机
rabbitmqctl list_vhost_limits --global
使用统计
list_queues
显示队列信息,默认主机为【/】
- –offline:主节点不可用的持久化队列
- –online:主节点可用的队列
- –local:主节点在当前进程上的队列
queueinfoitem可选参数
- name:队列名称
- durable:队列是否持久的,服务器重启后仍存在
- auto_delete:当队列不使用时,是否自动删除
- arguments:队列参数
- policy:有效的队列策略
- pid:队列的Erlang进程id
- owner_pid:当队列为独占时,连接的Erlang进程id
- exclusive:队列是否独占
- exclusive_consumer_pid:订阅队列的独占消费者的信道的Erlang进程id
- exclusive_consumer_tag:订阅队列的独占消费者的标签
- messages_ready:可被消费者消费的消息数
- messages_unacknowledged:已被消费者获取,但还未确认的消息数
- messages:messages_ready+messages_unacknowledged
- messages_ready_ram:内存中,可被消费者消费的消息数
- messages_unacknowledged_ram:内存中,已被消费者获取,但还未确认的消息数
- messages_ram:内存中,messages_ready+messages_unacknowledged
- messages_persistent:队列中的持久化消息数
- message_bytes:队列中消息的大小(仅算正文)
- message_bytes_ready:队列中消息的大小(仅算正文),可被消费者消费的消息数
- message_bytes_unacknowledged:队列中消息的大小(仅算正文),已被消费者获取,但还未确认的消息数
- message_bytes_ram:队列中在内存消息的大小(仅算正文)
- message_bytes_persistent:队列中持久化消息的大小(仅算正文)
- head_message_timestamp:队列中第一条消息的timestamp
- disk_reads:队列启动后从磁盘读取消息的总次数
- disk_writes:队列启动后向磁盘写入消息的总次数
- consumers:消费者数量
- consumer_utilisation:队列能够立即向消费者传递消息的时间分数(介于0.0和1.0之间)。如果消费者受到网络拥塞或预取计数的限制,则可以小于1.0
- memory:队列运行时分配的内存字节数,包括堆栈,堆和内部结构
- slave_pids:如果队列是镜像的,则列出镜像的ID(跟随者副本)
- synchronised_slave_pids:如果镜像是队列,则列出主(领导者)同步的镜像(跟随者副本)的ID
- state:队列状态,一般为running
#命令格式
list_queues [-p vhost] [--offline | --online | --local] [queueinfoitem ...]
#示例
rabbitmqctl list_queues name pid
list_exchanges
显示交换器信息,默认主机为【/】
exchangeinfoitem可选参数
- name:交换器名称
- type:交换器类型(fanout,direct,headers,topic)
- durable:交换器是否持久的,服务器重启后仍存在
- auto_delete:当交换器不使用时,是否自动删除
- internal:是否内部交换器,
- arguments:交换器参数
- policy:应用在交换器上的策略名称
#命令格式
list_exchanges [-p vhost] [exchangeinfoitem ...]
#示例
rabbitmqctl list_exchanges name type
list_bindings
显示绑定信息,默认主机为【/】
bindinginfoitem可选参数
- source_name:交换器名称
- source_kind:exchange
- destination_name:队列名称
- destination_kind:queue
- routing_key:绑定的路由键
- arguments:绑定参数
#命令格式
list_bindings [-p vhost] [bindinginfoitem ...]
#示例
rabbitmqctl list_bindings
list_connections
显示连接信息
connectioninfoitem可选参数
- pid:与连接关联的Erlang进程id
- name:连接的可读名称
- port:服务器端口
- host:服务器ip
- peer_port:客户端端口
- peer_host:客户端ip
- ssl:是否开启ssl
- ssl_protocol:ssl协议
- ssl_key_exchange:SSL密钥交换算法(例如“rsa”)
- ssl_cipher:SSL密码算法(例如“aes_256_cbc”)
- ssl_hash:SSL散列函数(例如“sha”)
- peer_cert_subject:对等方SSL证书的主题,RFC4514格式
- peer_cert_issuer:对等方SSL证书的颁发者,采用RFC4514格式
- peer_cert_validity:对等方SSL证书有效的时间段
- state:连接状态(starting,tuning,opening,running,flow,blocking,blocked,closing,closed)
- channels:使用连接的信道数量
- protocol:AMQP协议版本(0.9.1,0.8.0)
- auth_mechanism:使用SASL身份验证机制,例如“PLAIN”
- user:连接使用的用户名
- vhost:连接的虚拟主机
- timeout:连接的超时时间/心跳间隔
- frame_max:最大帧大小
- channel_max:连接的可用信道数
- client_properties:连接的客户端属性
- recv_oct:Octets received
- recv_cnt:Packets received
- send_oct:Octets send
- send_cnt:Packets sent
- send_pend :Send queue size
- connected_at:连接建立时间
#命令格式
list_connections [connectioninfoitem ...]
#示例
rabbitmqctl list_connections
list_channels
显示信道信息
channelinfoitem可选参数
- pid:与连接关联的Erlang进程id
- connection:信道所在的连接
- name:信道名称
- number:信道编号
- user:连接使用的用户名
- vhost:连接的虚拟主机
- confirm:信道是否处于确认模式
- consumer_count:信道的消费者数量
- messages_unacknowledged:未被确认的已发布的消息数
- messages_unconfirmed:未被消费者确认的消息数
- prefetch_count:新消费者的预取限制
- global_prefetch_count:整个信道的预取限制
#命令格式
list_channels [channelinfoitem ...]
#示例
rabbitmqctl list_channels
list_consumers
显示消费者信息
#命令格式
list_consumers [-p vhost]
#示例
rabbitmqctl list_consumers
策略管理
set_policy
设置主机的策略,默认主机为【/】
- -p:虚拟主机
- –priority:策略优先级,数字越大优先级越高
- –apply-to:策略应用对象,【queues,exchanges,all】,默认为【all】
- name:策略名称
- pattern:匹配的资源名称,使用正则表达式匹配
- definition:策略定义,使用JSON格式,可参考web管理系统的policies设置页
#命令格式
set_policy [-p vhost] [--priority priority] [--apply-to apply-to] name pattern definition
#示例
rabbitmqctl set_policy -p interview ha_policy '^' '{"ha-mode":"all"}'
clear_policy
删除主机的策略,默认主机为【/】
#命令格式
clear_policy [-p vhost] name
#示例
clear_policy -p interview ha_policy
list_policies
显示主机的策略,默认主机为【/】
#命令格式
list_policies [-p vhost]
#示例
rabbitmqctl list_policies -p interview