rabbitmqctl 命令的一些基础操作
rabbitmqctl add vhost {vhostName} -> 命令创建一个新的 vhost ,大括号里的参 数表示 vhost 的名称。
rabbitmqctl list_vhosts {name,tracing} -> name:罗列出所有虚拟机,tracing:表示是否使用了 RabbitMQ 的 trace 功能
rabbitmqctl delete_vhost {vhostName) -> 命令删除一个vhost,同时也会删除其下所有的队列、交换器、绑定关系、 用户权限、参数和策略等信息。
rabbitmqctl set permissions [-p vhostName] {userName) {conf) {write) {read) -> RabbitMQ 中的授予权限是指在 vhost 级别对用户而言的权限授予。
vhost: 授予用户访问权限的 vhost 名称,可以设置为默认值,即 vhost 为 "/"。
user: 可以访问指定 vhost 的用户名。
conf: 一个用于匹配用户在哪些资源上拥有可配置权限的正则表达式。(交换机,队列,创建用户等)
write: 一个用于匹配用户在哪些资源上拥有可写权限的正则表达式。
read: 一个用于匹配用户在哪些资源上拥有可读权限的正则表达式。
rabbitmqctl set_permissions -p vhost1 root ".*" ".*" ".*" -> 配置root用户在vhost1队列拥有所有权限
rabbitmqctl set_permissions -p vhost2 root "^queue.*" ".*" ".*" -> 配置root用户在vhost2队列拥有以"queue"开头的资源上具备可配置权限,并在所有资源上有用读写权限
rabbitmqctl clear_permissions [-p vhostName] {userName} -> 清楚用户对某个虚拟机的权限。
rabbitmqctl list_permissions [-p vhost] -> 用来显示虚拟主机上的权限。
rabbitmqctl list_user_permissions {userName} -> 用来显示用户在已分配虚拟机上的权限。
rabbitmqctl 是用来管理 RabbitMQ 中间件的命令行工具,它通过连接各个 RabbitMQ 节点来执行所有操作。
rabbitmqctl [-n node) [-t timeout) [-q) (command) [command options...)
-q:标志来启用 quiet 模式,这样可以屏蔽一些消息的输出。 默认不开启 quiet 模式。
-t:操作超时时间(秒为单位),只适用于 "list_xxx" 类型的命令,默认是无穷大。
演示效果:/默认虚拟机
./rabbitmqctl list_vhosts
Listing vhosts
/
./rabbitmqctl list_vhosts -q
/
./rabbitmqctl list vhosts -q -t 1
/
./rabbitmqctl list vhosts -q -t 0
Error : {timeout , O. O}
用户管理操作
rabbitmqctl add_user {userName} {passWord} -> 创建用户
rabbitmqctl change_password {userName} {newPassword} -> 修改密码
rabbitmqctl clear_password {userName} -> 清除用户密码
rabbitmqctl authentiçate_user {userName} {passWord} -> 验证用户
rabbitmqctl delete_user {userName} -> 删除用户
rabbitmqctl llist_users -> 罗列当前所有用户,和用户角色
rabbitmqctl set_user_tags {userName} {tag ...} -> 给用户设置角色,tag 参数用于设置 0个、1个或者 多个的角色,设置之后任何之前现有的身份都会被删除。
用户角色分为5中类型:
none: 无任何角色。新创建的用户的角色默认为 none。
management:可以访问web管理页面。
policymaker:包含managerment的所有权限,并且可以管理策略(Policy)和参数(Parameter)。
monitoring:包含management的所有权限,并且可以看到所有链接、信道及节点相关的信息。
administartor:包含monitoring的所有权限,并且可以管理用户、虚拟机、权限、策略、参数等。(最高权限)
web页面管理操作
Rabbitmq有管理页面,访问是 localhost:15672 ,但是需要开启 RabbitMQ management 插件才可以访问,Rabbitmq自带的插件都是在 /plugins 目录下,如下所示:
-rw-r--r-- 1 root root 162570 Oct 25 19 : 45 rabbitmq_federation-3.6.10.ez
-rw-r--r-- 1 root root 13796 Oct 25 19 : 45 rabbitmq_federation_management-3.6.10.ez
-rw-r--r-- 1 root root 22414 Oct 25 19 :45 rabbitmq_jms_topic_exchange-3.6.10.ez
-rw-r--r-- 1 root root 744360 Oct 25 19 : 45 rabbitmq_management-3.6.10.ez
-rw-r--r-- 1 root root 149205 Oct 25 19 : 45 rabbitmq_management_agent-3.6.10.ez
-rw-r--r-- 1 root root 41421 Oct 25 19 : 45 rabbitmq_management_visua1iser-3.6.10.ez
其中以.ez扩展展名称结尾的文件就是 RabbtMQ 的插件。rabbitmq_management-3.6.10.ez 就是指 RabbitMQ Management 插件。启动语法如下:
rabbitmq-plugins [-n node] {command} [command options ...]
rabbitmq-plugins enable [plugin-name] -> 启动插件
rabbitmq-plugins disable [plugin-name] -> 关闭插件
rabbitmq-plugins enable rabbitmq_management
rabbitmq-plugins list -> 查看启动的插件有哪些,其中[E]的为显示启动,[e]的为隐式启动,其意思就是启动一个插件,还需要启动一些其他插件,而这些插件就是隐式启动,被指定的插件称为显示启动。
rabbitmq_management 插件之后还需要重启 RabbitMQ 服务才能使其正式生效。
应用管理命令
rabbitmqctl stop [pid_file] -> 停止运行RabbitMQ的Erlang虚拟机和RabbitMQ服务应用,其中pid_file是通过rabbitmq-server 命令启动 RabbitMQ 服务时创建的,默认情况下存放于mnesia 目录中。注意rabbitmq-server -detach 这个带有 -detach 后缀的命令来启动 RabbitMQ 服务则不会生成 pid_file 文件。指定pid_file会等待指定进程的结束。
rabbitmqctl shutdown -> 停止运行 RabbitMQ 的 Erlang 虚拟机和 RabbitMQ 务应用。如果 RabbitMQ 没有成功关闭,则会返回一个非零值。这个命令和rabbitmqctl stop 不同的是,它不需要指定 pid_file 而可以阻塞等待指定进程的关闭。
rabbitmqctl stop_ app -> 停止 RabbitMQ 服务应用,但是 Erlang 虚拟机还是处于运行状态。此命令的执行优先于其 他管理操作,比如 rabbitmqctl reset。
rabbitmqctl start_ app -> 启动 RabbitMQ 应用。命令 型的用途是在执行了其他管理操作之后,重新启动之前停 止的 RabbitMQ 应用,比 rabbi tmqctl reset。
rabbitmqctl wait [pid_file] -> 等待 RabbitMQ 应用的启动。它会等到 pid_file 的创建,然后等待 pid_file 中所代表 的进程启动。当指定的进程没有启动 RabbitMQ 应用而关闭时将会返回失败。
rabbitmqctl reset -> 将RabbitMQ 节点重置还原到最初状态。包括从原来所在的集群中删除此节点,从管理数据库 中删除所有的配置数据,如己配置的用户、 vhost 等,以及删除所有的持久化消息。执行 rabbi tmqctl reset 命令前必须停止RabbitMQ 应用。
rabbitmqctl force _reset -> 强制将 RabbitMQ 节点重置还原到最初状态。不同于 rabbitmqctl reset 命令, rabbitmqctl force_reset 命令不论当前管理数据库的状态和集群配置是什么,都会无条件地重直节点。它只能在数据库或集群配置己损坏的情况下使用。与 rabbitmqctl reset 命令一样,执行 rabbitmqctl force_reset 命令前必须先停止 RabbitMQ 应用。
rabbitmqctl rotate_logs {suffix} -> 指示 RabbitMQ 节点轮换日志文件。RabbitMQ 节点会将原来的日志文件中的内容追加到"原 始名称+后缀"的日志文件中,然后再将新的日志内容记录到新创建的日志中(与原日志文件同 名)。当目标文件不存在时,会重新创建。如果不指定后缀 suffix. 则日志文件只是重新打开 而不会进行轮换。
rabbitmqctl hipe_compile {directory} -> 暂时未知使用
集群命令
rabbitmqctl joio_cluster {cluster_node} [--ram] -> 将节点加入指定集群中。在这个命令执行前需要停止 RabbitMQ 应用井重置节点。
rabbitmqctl cluster_status -> 显示集群的状态。
rabbitmqctl change_cluster_node_type {disclram} -> 修改集群节点的类型。在这个命令执行前需要停止 Rabb tMQ 应用。
rabbitmqctl forget_cluster_ node [--offiine] -> 将节点从集群中删除,允许离线执行 。
rabbitmqctl update_ cluster_nodes {clusternode} -> 在集群中的节点应用启动前咨询 clusternode 节点的最新信息,并更新相应的集群信息。这个和 join_cluster 不同,它不加入集群。考虑这样一种情况 节点A和节点B都在集群中,当节点A离线了,节点C又和节点B组成了一个集群,然后节点B又离开了集群,但A醒来的时候,他会尝试联系节点B,但是这样会失败,因为节点B已经不再集群中了。Rabbitmqctlupdate cluster nodes -n A C 可以解决这种场景下出现的问题。
rabbitmqctl force_boot -> 确保节点可以启动,即使它不是最后一个关闭的节点。通常情况下,当关闭整个 RabbitMQ 集群时,重启的第一个节点应该是最后关闭的节点,因为它可以看到其他节点所看不到的事情。 但是有时会有一些异常情况出现,比如整个集群都掉电而所有节点都认为它不是最后 个关闭 的。在这种情况下,可以调用 rabbitmqctl force_boot 命令,这就告诉节点可以无条件 地启动节点。在此节点关闭后,集群的任何变化,它都会丢失。如果最后 个关闭的节点永久 丢失了,那么需要优先使用 rabbitmqctl forget_cluster _node offline 命令,因 为它可以确保镜像队列的正常运转。
rabbitmqctl sync_queue [-p vhost] {queue} -> 指示未同步队列 queue的slave 镜像可以同步 maste 镜像行的内容。同步期间此队列会被 阻塞(所有此队列的生产消费者都会被阻塞),直到同步完成。此条命令执行成功的前提是队列 queue 配置了镜像。注意 未同步队列中的消息被耗尽后 最终也会变成同步,此命令主要用 于未耗尽的队列。
rabbitmqctl cancel_sync_queue [-p vhost] {queue} -> 取消队列 queue 同步镜像的操作。
rabbitmqctl set_cluster_name {name} -> 设置集群名称。
服务端状态查询
rabbitmqctl list_queues [-p vhost] [queueinfoitem ...] -> 此命令返回队列的详细信息,如果无 [-p vhost] 参数,将显示默认的 vhost为 "/" 中的 队列详情。queueinfoitem 参数用于指示哪些队列的信息项会包含在结果集中,结果集的列 顺序将匹配参数的顺序。 queueinfoitem 可以是下面列表中的任何值:
name: 队列名称。
durable:队列是否持久。
auto_delete:队列是否自动删除。
arguments:队列的参数。
policy:应用到队列上的策略名称。
pid:队列关联Er1ang进程的ID。
owner_pid:处理排他队列连接的 Erlang 进程ID。如果此队列是非排他的,此值将为空。
exclusive:队列是否是排他的。
exclusive_consumer_pid:订阅到此排他队列的消费者相关的信道关联的 Erlang 进程ID。如果此队列是非排他的,此值将为空
exclusive_consumer_tag:订阅到此排他队列的消费者的 consumerTag 如果 此队列是非排他的,此值将为空。
messages_ready:准备发送给客户端的消息个数。
messages_unacknowledged:发送给客户端但尚未应答的消息个数。
messages:准备发送给客户端和未应答消息的总和。
messages_ready_ram:驻留在内存中 messages_ready 的消息个数。
messages_unacknowledged_ram:驻留在内存中 messages_unacknowledged 的消息个数。
messages_ram:驻留在内存中的消息总数。
messages_persistent:队列中持久化消息的个数。对于非持久化队列来说总是0.
messages_bytes:队列中所有消息的大小总和 这里不包括消息属性或者任何其他开销。
messages_bytes_ready: 准备发送给客户端的消息的大小总和。
messages_bytes_unacknowledged:发送给客户端但尚未应答的消息的大小总和。
messages_bytes_ram:驻留在内存中的 messages_bytes。
messages_bytes_persistent:队列中持久化的 messages_bytes。
disk_reads:从队列启动开始,己从磁盘中读取该队列的消息总次数。
disk_writes:从队列启动开始,己向磁盘队列写消息的总次数。
consumer:消费者数目。
consumer_utilisation:队列中的消息能够立刻投递给消费者的比率,介于0和1之间 。这个受网络拥塞或者 Basic.Qos 的影响而小于1.
memory:与队列相关的 Erlang 进程所消耗的内存字节数,包括械、堆及内部结构。
slave_pids:如果队列是镜像的 ,列出所有 slave 镜像的 pid。
synchronised_slave_pids:如果队列是镜像的,列出所有己经同步的 slave 镜像的pid。
state:队列状 态。正常情况下是running:如果队列正常同步数据可能会有 "{syncing, MsgCount}" 的状态;如果队列所在的节点掉线了,则队列显示状态为 down (此时大多数的 queueinfoitems 也将不可用)。
rabbitmqctl list_exchanges [-p vhost] [exchangeinfoitem ...] -> 返回交换器的详细细节。
name:交换器名称。
type:交换器类型。
durable:设置是否持久化。
auto_delete:是否自动删除。
internal:是否内置的。
arguments:其他的一些结构化参数。
policy:交换器上的策略名称。
rabbitmqctl list_bindings [-p vhost] [bindinginfoitem ...] -> 返回绑定关系的细节
source_name:绑定中消息来源的名称。
source_kind:绑定中消息来源的类别。
destination_name:绑定中消息目的地的名称。
destination_kind:绑定中消息目的地的种类。
routing_key:绑定的路由键。
arguments:绑定的参数。
rabbìtmqctl lìst_connectìons [connectìonìnfoìtem ...] -> 返回 TCP!IP连接的统计信息。
pid:与连接相关的 Er1ang 进程 ID
name:连接的名称。
port:服务器端口。
host:返回反向 DNS 获取的服务器主机名称,或者 IP 地址,或者未启用。
peer_port:服务器对端端口。当一个客户端与服务器连接时,这个客户端的端口就是peer_port。
peer_host:返回反向 DNS 获取的对端主机名称,或者ip地址,或者未启用。
ssl:是否启用 SSL
ssl_protoco1:SSL 协议,如 tlsvl
ssl_key_exchange:SSL 密钥交换算法,如 rsa
ssl_cipher:SSL 加密算法,如 aes 256 cbc
ssl_hash:SSL 哈希算法,如 sha
peer_cert_subject:对端的 SSL 安全证书的主题,基于盯C4514 的形式。
peer_cert_issuer:对端 SSL 安全证书的发行者, 基于RFC4514 的形式
peer_cert_va1idity:对端 SSL 安全证书的有效期。
state:连接状态,包括 starting tuning opening running flow blocking blocking closing closed 这几种。
channe1s:该连接中的信道个数。
protoco1:使用的 AMQP 协议的版本,当前是 {0,9,1} 或者 {0,8,0} 。注意,如果客户端请求的是 AMQP 0-9 的连接, RabbitMQ 也会将其视为0-9-1
auth_mechanism:使用的 SASL 认证机制,如 PLAIN AMQPLAIN EXTERNAL RABBIT-CR-DEMO 等
user:与连接相关的用户名。
vhost:与连接相关的 vhost 的名称。
timeout:连接超时/协商的心跳间隔,单位为秒。
frame_max:最大传输帧的大小,单位为B
channe1_max:此连接上信道的最大数量。如果值0,,则表示无上限,但客户端一般会将0转变为 65535
c1ient_properties:在建立连接期间由客户端发送的信息属性。
recv_oct:收到的字节数。
recv_cnt:收到的数据包个数。
send_oct:发送的字节数。
send_cnt:发送的数据包个数。
send_pend:发送队列大小。
connected_at:连接建立的时间戳。
rabbitmqctl list_channels [channelinfoitem ...] -> 返回当前所有信道的信息。
pid:与连接相关的 Erlang 进程 ID
connection:信道所属连接的 Erlang 进程 ID
name:信道的名称。
number:信道的序号。
user:与信道相关的用户名称。
vhost:与信道相关的 vhost
transactional:信道是否处于事务模式。
confirm:信道是否处于 publisher confirm 模式。
consumer_count:信道中的消费者的个数。
messages_unacknowledged:己投递但是还未被 ack 的消息个数。
messages_uncommitted:己接收但是还未提交事务的消息个数
acks_uncommitted:已ack 收到但是还未提交事务的消息个数
messages_unconfirmed:己发送但是还未确认的消息个数 如果信道不处于 publisher confmn 模式下 ,则此值为0
perfetch_count:新消费者的 Qos 个数限制 0表示无上限
global_prefetch_count:: 整个信道的 Qos 个数限制,0表示无上限
rabbitmqctllist_consumers [-p vhost] -> 列举消费者信息 每行将显示由制表符分隔的己订阅队列的名称、相关信道的进程标识、consumerTag、是否需要消费端确认 prefetch_count 及参数列表这些信息。
rabbitmqctl status -> 显示 Broker 的状态,比如当前 Erlang 节点上运行的应用程序、RabbitMQ/Erlang的版本信息、os 的名称、内 存及文件描述符等统计信息。
rabbitmqctl node_health_check -> 对RabbitMQ 节点进行健康检查,确认应用是否正常运行、list_queues list_channels 是否能够正常返回等。
rabbitmqctl environment -> 显示每个运行程序环境中每个变量的名称和值。
rabbitmqctl report -> 为所有服务器状态生成一个服务器状态报告,井将输出重定向到一个文件:rabbitmqctl report > report.txt
RabbitMQ Http API 接口
尽情期待