RabbitMQ学习-服务器命令

server-command

Posted by zwtisme on May 8, 2018

介绍RabbitMQ服务端命令的使用方法与作用。

rabbitmq-server

RabbitMQ节点一般指RabbitMQ应用程序和其所在的Erlang节点,当运行在Erlang节点上的应用程序崩溃时,Erlang会自动尝试重启应用程序(如果Erlang本身没有崩溃)。

image

启动节点

#前台启动
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

rabbitmq-plugins

参考资料

rabbitmq-server

rabbitmqctl

rabbitmq-plugins