RabbitMQ 常用命令
简介
基本概念
- Server(broker): 承受客户端连贯,实现 AMQP 音讯队列和路由性能的过程。
- Virtual Host: 其实是一个虚构概念,相似于权限控制组,一个 Virtual Host 外面能够有若干个 Exchange 和 Queue,然而权限管制的最小粒度是 Virtual Host。
- Exchange: 承受生产者发送的音讯,并依据 Binding 规定将音讯路由给服务器中的队列。ExchangeType 决定了 Exchange 路由音讯的行为,例如,在 RabbitMQ 中,ExchangeType 有 direct、Fanout 和 Topic 三种,不同类型的 Exchange 路由的行为是不一样的。
- Message Queue:音讯队列,用于存储还未被消费者生产的音讯。
- Message: 由 Header 和 Body 组成,Header 是由生产者增加的各种属性的汇合,包含 Message 是否被长久化、由哪个 Message Queue 承受、优先级是多少等。而 Body 是真正须要传输的 APP 数据。
- Binding:Binding 分割了 Exchange 与 Message Queue。Exchange 在与多个 Message Queue 产生 Binding 后会生成一张路由表,路由表中存储着 Message Queue 所需音讯的限度条件即 Binding Key。当 Exchange 收到 Message 时会解析其 Header 失去 Routing Key,Exchange 依据 Routing Key 与 Exchange Type 将 Message 路由到 Message Queue。Binding Key 由 Consumer 在 Binding Exchange 与 Message Queue 时指定,而 Routing Key 由 Producer 发送 Message 时指定,两者的匹配形式由 Exchange Type 决定。
- Connection: 连贯,对于 RabbitMQ 而言,其实就是一个位于客户端和 Broker 之间的 TCP 连贯。
- Channel: 信道,仅仅创立了客户端到 Broker 之间的连贯后,客户端还是不能发送音讯的。须要为每一个 Connection 创立 Channel,AMQP 协定规定只有通过 Channel 能力执行 AMQP 的命令。一个 Connection 能够蕴含多个 Channel。之所以须要 Channel,是因为 TCP 连贯的建设和开释都是非常低廉的,如果一个客户端每一个线程都须要与 Broker 交互,如果每一个线程都建设一个 TCP 连贯,暂且不思考 TCP 连贯是否节约,就算操作系统也无奈接受每秒建设如此多的 TCP 连贯。RabbitMQ 倡议客户端线程之间不要共用 Channel,至多要保障共用 Channel 的线程发送音讯必须是串行的,然而倡议尽量共用 Connection。
- Command:AMQP 的命令,客户端通过 Command 实现与 AMQP 服务器的交互来实现本身的逻辑。例如在 RabbitMQ 中,客户端能够通过 publish 命令发送音讯,txSelect 开启一个事务,txCommit 提交一个事务。
用户角色
用户角色分为 5 中类型:
用户角色可分为五类,超级管理员, 监控者, 策略制定者, 一般管理者以及其余。
超级管理员(administrator)
可登陆治理控制台 (启用 management plugin 的状况下),可查看所有的信息,并且能够对用户,策略(policy) 进行操作。
监控者(monitoring)
可登陆治理控制台(启用 management plugin 的状况下),同时能够查看 rabbitmq 节点的相干信息(过程数,内存应用状况,磁盘应用状况等)
策略制定者(policymaker)
可登陆治理控制台(启用 management plugin 的状况下), 同时能够对 policy 进行治理。但无奈查看节点的相干信息
一般管理者(management)
仅可登陆治理控制台(启用 management plugin 的状况下),无奈看到节点信息,也无奈对策略进行治理。
其余(none)
无奈登陆治理控制台,通常就是一般的生产者和消费者。
常用命令
节点治理
# 查问节点状态
rabbitmqctl status
# 进行 RabbitMQ 利用,然而 Erlang 虚拟机还是处于运行状态。此命令的执行优先于其余治理操作,比方 rabbitmqctl reset。rabbitmqctl stop_ app
# 启动 RabbitMQ 利用。在执行了其余治理操作之后,重新启动之前进行的 RabbitMQ 利用,比 rabbitmqctl reset。rabbitmqctl start_app
# 重置 RabbitMQ 节点,将 RabbitMQ 节点重置还原到最后状态。包含从原来所在的集群中删除此节点,从治理数据库 中删除所有的配置数据,如己配置的用户、vhost 等,以及删除所有的长久化音讯。执行 rabbi tmqctl reset 命令前必须进行 RabbitMQ 利用。rabbitmqctl reset
# 强制将 RabbitMQ 节点重置还原到最后状态。不同于 rabbitmqctl reset 命令,rabbitmqctl force_reset 命令不管以后治理数据库的状态和集群配置是什么,都会无条件地重直节点。它只能在数据库或集群配置己损坏的状况下应用。与 rabbitmqctl reset 命令一样,执行 rabbitmqctl force_reset 命令前必须先进行 RabbitMQ 利用。rabbitmqctl force_reset
# 批示 RabbitMQ 节点轮换日志文件。RabbitMQ 节点会将原来的日志文件中的内容追加到 "原 始名称 + 后缀" 的日志文件中,而后再将新的日志内容记录到新创建的日志中(与原日志文件同名)。当指标文件不存在时,会从新创立。如果不指定后缀 suffix. 则日志文件只是从新关上而不会进行轮换。rabbitmqctl rotate_logs {suffix}
# 进行运行 RabbitMQ 的 Erlang 虚拟机和 RabbitMQ 利用。如果 RabbitMQ 没有胜利敞开,则会返回一个非零值。这个命令和 rabbitmqctl stop 不同的是,它不须要指定 pid_file 而能够阻塞期待指定过程的敞开。rabbitmqctl shutdown
# 进行运行 RabbitMQ 的 Erlang 虚拟机和 RabbitMQ 服务利用,其中 pid_file 是通过 rabbitmq-server 命令启动 RabbitMQ 服务时创立的,默认状况下寄存于 mnesia 目录中。留神 rabbitmq-server -detach 这个带有 -detach 后缀的命令来启动 RabbitMQ 服务则不会生成 pid_file 文件。指定 pid_file 会期待指定过程的完结。rabbitmqctl stop [pid_file]
插件治理
# rabbitmq-plugins [-n node] {command} [command options ...]
# 启动插件
# rabbitmq-plugins enable [--offline] [--online] {plugin ...}
rabbitmq-plugins enable rabbitmq_management
# 禁用插件
# rabbitmq-plugins disable [--offline] [--online] {plugin ...}
rabbitmq-plugins disable rabbitmq_management
# 示意启用参数指定的插件,并且禁用其余所有插件
# 没有参数示意禁用所有的插件
rabbitmq-plugin set rabbitmq_management
# 显示所有的插件,每一行一个
rabbitmq-plugins list
# 显示所有的插件,并且显示插件的版本号和形容信息
rabbitmq-plugins list -v
# 显示所有名称含有 "management" 的插件
rabbitmq-plugins list -v management
# 显示所有显示或者隐式启动的插件
rabbitmq-plugins list -e rabbit
对象治理
# name:列举出所有虚拟机,tracing:示意是否应用了 RabbitMQ 的 trace 性能
rabbitmqctl list_vhosts [name,tracing]
# 查看交换器
rabbitmqctl list_exchanges [-p vhost] [exchangeinfoitem ...]
# 查看绑定关系的细节
rabbitmqctl list_bindings [-p vhost] [bindinginfoitem ...]
# 查看已申明的队列
rabbitmqctl list_queues [-p vhost] [queueinfoitem ...]
# 返回 TCP!IP 连贯的统计信息。rabbìtmqctl lìst_connectìons [connectìonìnfoìtem ...]
# 返回以后所有信道的信息。rabbitmqctl list_channels [channelinfoitem ...]
# 列举消费者信息 每行将显示由制表符分隔的己订阅队列的名称、相干信道的过程标识、consumerTag、是否须要生产端确认 prefetch_count 及参数列表这些信息。rabbitmqctl list_consumers [-p vhost]
# 创立一个新的 vhost,大括号里的参 数示意 vhost 的名称。rabbitmqctl add vhost {vhostName}
# 删除一个 vhost,同时也会删除其下所有的队列、交换器、绑定关系、用户权限、参数和策略等信息。rabbitmqctl delete_vhost {vhostName}
# RabbitMQ 中的授予权限是指在 vhost 级别对用户而言的权限授予。rabbitmqctl set permissions [-p vhostName] {userName} {conf} {write} {read}
# 对 RabbitMQ 节点进行健康检查, 确认利用是否失常运行、list_queues list_channels 是否可能失常返回等。rabbitmqctl node_health_check
# 显示每个运行程序环境中每个变量的名称和值。rabbitmqctl environment
# 为所有服务器状态生成一个服务器状态报告,井将输入重定向到一个文件:rabbitmqctl report > report.txt
rabbitmqctl report
# 显示 Broker 的状态,比方以后 Erlang 节点上运行的应用程序、RabbitMQ/Erlang 的版本信息、os 的名称、内 存及文件描述符等统计信息。rabbitmqctl status
# 策略管理
# 策略查看
rabbitmqctl list_policies [-p <vhost>]
# 策略设置
rabbitmqctl set_policy [-p <vhost>] [--priority <priority>] [--apply-to <apply-to>] <name> <pattern> <definition>
# 策略革除
rabbitmqctl clear_policy [-p <vhost>] <name>
集群治理
# 显示集群的状态
rabbitmqctl cluster_status
# 将节点退出指定集群中。在这个命令执行前须要进行 RabbitMQ 利用井重置节点。rabbitmqctl joio_cluster {cluster_node} [--ram]
# 批改集群节点的类型。在这个命令执行前须要进行 RabbitMQ 利用。rabbitmqctl change_cluster_node_type {disclram}
# 将节点从集群中删除,容许离线执行。rabbitmqctl forget_cluster_node [--offiine]
# 来查看那些 slaves 曾经实现同步:rabbitmqctl list_queues {queue_name} {slave_pids} synchronised_slave_pids
# 手动的形式同步一个 queue:rabbitmqctl sync_queue {queue_name}
# 勾销某个 queue 的同步性能:rabbitmqctl cancel_sync_queue {queue_name}
用户治理
# 查看用户列表
rabbitmqctl list_users
# 删除用户
rabbitmqctl delete_user {username}
# 革除用户明码
rabbitmqctl clear_password {username}
# 批改明码
rabbitmqctl change_password {username} {newPassword}
# 验证用户
rabbitmqctl authentiçate_user {username} {passWord}
# 新增用户
rabbitmqctl add_user {username} {password}
# 给用户受权
rabbitmqctl set_user_tags {username} {roles}
# 分明用户对某个虚拟机的权限。rabbitmqctl clear_permissions [-p vhostName] {username}
# 用来显示虚拟主机上的权限。rabbitmqctl list_permissions [-p vhost]
# 用来显示用户在已调配虚拟机上的权限。rabbitmqctl list_user_permissions {username}
命令实战
用户操作
# 能够创立管理员用户,负责整个 MQ 的运维
rabbitmqctl add_user admin adminpasspord
# 赋予其 administrator 角色
rabbitmqctl set_user_tags admin administrator
# 创立 RabbitMQ 监控用户,负责整个 MQ 的监控
rabbitmqctl add_user user_monitoring passwd_monitor
# 赋予其 monitoring 角色
rabbitmqctl set_user_tags user_monitoring monitoring