RabbitMQ(六) - RabbitMQ的管理操作

一、多租户和权限

每一个RabbitMQ 服务器都能创建虚拟的消息服务器,我们称之为虚拟主机( virtual host),简称为vhost 。每一个vhost 本质上是一个独立的小型RabbitMQ 服务器,拥有自己独立的队列、交换器及绑定关系等,井且它拥有自己独立的权限。vhost 之间是绝对隔离的,无法将vhostl 中的交换器与vhost2 中的队列进行绑定,这样既保证了安全性,又可以确保可移植性。如果在使用RabbitMQ 达到一定规模的时候,建议用户对业务功能、场景进行归类区分,并为之分配独立的vhost。
RabbitMQ 默认创建的vhost 为“/”,如果不需要多个vhost ,那么使用默认的用户名guest 和密码guest 就可以访问它。但是为了安全和方便,建议重新建立一个新的用户来访问它。

rabbitmqctl 工具是用来管理RabbitMQ 中间件的命令行工具,它通过连接各个RabbitMQ 节点来执行所有操作。

  • rabbitmqctl [ -n node] [-t timeout] [-q] {command) [command options ... ][-n node]
    [-q]
    使用-q 标志来启用quiet 模式,这样可以屏蔽一些消息的输出。默认不开启quiet 模式。
    [ - t timeout]
    操作超时时间(秒为单位),只适用于“ list_xxx ”类型的命令,默认是无穷大。

  • 可以使用rabbitmqctl add_vhost {vhost}命令创建一个新的vhost ,大括号里的参数表示vhost 的名称。
    命令示例:rabbitmqctl add_vhost testvhost
    在这里插入图片描述
    控制台的情况:
    在这里插入图片描述

  • 可以使用rabbitmqctl list_vhosts [vhostinfoitem ... ]来罗列当前vhost 的相关信息。目前vhostinfoitem 的取值有2 个:name :默认值,表示vhost 的名称;tracing :表示是否使用了RabbitMQ 的trace 功能。
    命令示例:rabbitmqctl list_vhosts name tracing
    在这里插入图片描述

  • 删除vhost 的命令是: rabbitmqctl delete_vhost {vhost }
    命令示例:rabbitmqctl delete_vhost testvhost
    在这里插入图片描述

  • 授予权限命令为: rabbitmqctl set_permissions [-p vhost] {user}{conf} {write} {read}
    vhost :授予用户访问权限的vho st 名称,可以设置为默认值,即vhost 为“/,,
    user : 可以访问指定vhost 的用户名。
    conf : 一个用于匹配用户在哪些资源上拥有可配置权限的正则表达式。
    write :一个用于匹配用户在哪些资源上拥有可写权限的正则表达式。
    read : 一个用于匹配用户在哪些资源上拥有可读权限的正则表达式。

授予root 用户可访问虚拟主机testvhost ,并在所有资源上都具备可配置、可写及可读的权限,示例如下:

rabbitmqctl set_permissions -p testvhost root ".*" ".*" ".*"

授予root 用户可访问虚拟主机testvhost , 在以“ queue ”开头的资源上具备可配置权限,并在
所有资源上拥有可写、可读的权限, 示例如下:

rabbitmqctl set_permissions -p testvhost root " ^queue.*" ".*" ".*"
  • 清除权限也是在vhost 级别对用户而言的:clear_permissions [-p vhost] {username}
rabbitmqctl clear_permissions -p testvhost root
  • 在RabbitMQ 中有两个Shell 命令可以列举权限信息。第一个命令是rabbitmqctl list_permissions [-p vhost],用来显示虚拟主机上的权限;
    第二个命令是rabbitmqctl list_user_permissions {username},用来显示用户的权限。
    根据下图可知guest拥有"/"下的所有资源的所有权限。
    在这里插入图片描述

二、用户管理

以下命令比较简单,不做赘述:

  • 添加用户:rabbitmqctl add_user {username} {password}
  • 修改用户密码:rabbitmqctl change_password {username} {newpassword}
  • 清除用户密码(这样用户就不能使用密码登录):rabbitmqctl clear_password {username}
  • 验证用户密码:rabbitmqctl authenticate_user {userηame} {password}
  • 删除用户:rabbitmqctl delete_user {username}
  • 罗列当前的所有用户(每个结果行都包含用户名称,其后紧跟用户的角色):rabbitmqctl list_users
    在这里插入图片描述
    用户的角色分为5 种类型:

none : 无任何角色。新创建的用户的角色默认为no 口e 。
1.management:可以访问Web 管理页面。Web 管理页面在5.3 节中会有详细介绍。
2.policymaker :包含management 的所有权限,并且可以管理策略( Policy )和参数( Parameter )。
3.monitoring : 包含management 的所有权限,并且可以看到所有连接、信道及节点相关的信息。
4.administartor : 包含monitoring 的所有权限,井且可以管理用户、虚拟主机、权限、策略、参数等,administator 代表了最高的权限。

  • 设置用户角色:rabbitmqctl set_user_tags {username) {tag ...}
    其中username 参数表示需要设置角色的用户名称: tag 参数用于设置0 个、1个或者多个的角色,设置之后任何之前现有的身份都会被删除。

三、Web端管理

①开启管理界面:

执行rabbitmq-plugins enable rabbitmq_management 命令来开启RabbitMQ managmenet 插件:
在这里插入图片描述

②查看当前插件使用情况

可以通过rabbitmq-plugins list 命令来查看当前插件的使用情况:
其中标记为[E*]的为显式启动,而[e*]为隐式启动,如显式启动rabbitmq ma n agement 插件会同时隐式启动amqp_client 、cowboy 、cow_lib 、rabbitmq_management_agent 、rabbitmq_web_dispatch 等另外5 个插件。
在这里插入图片描述

③重启RabbitMQ

开启rabbitmq_management 插件之后还需要重启RabbitMQ 服务才能使其正式生效:
net stop RabbitMQ && net start RabbitMQ

④之后就可以通过浏览器访问 http://localhost:15672

在这里插入图片描述
之前由命令行执行的操作都可以在该管理界面进行操作。

四、应用与集群管理

①应用管理

  • rabbitmqctl stop [pid_file]
    用于停止运行RabbitMQ 的Erlang 虚拟机和RabbitMQ 服务应用。其中pid file 是通过调用rabbitmq-server 命令启动RabbitMQ 服务时创建的,默认情况下存放于Mnesia 目录中,可以通过RABBITMQ PID FILE这个环境变量来改变存放路径。注意,如果使用rabbitmq -ser ver -detach 这个带有-detach 后缀的命令来启动RabbitMQ 服务则不会生成pid file 文件。
  • rabbitmqctl shutdown
    用于停止运行RabbitMQ 的Erlang 虚拟机和RabbitMQ 服务应用。执行这个命令会阻塞直到Erlang 虚拟机进程退出。如果RabbitMQ 没有成功关闭,则会返回一个非零值。这个命令和rabbitmqctl stop 不同的是,它不需要指定pid file 而可以阻塞等待指定进程的关闭。
  • rabbitmqctl stop_app
    停止RabbitMQ 服务应用,但是Erlang 虚拟机还是处于运行状态。
    rabbitmqctl start_app
    启动RabbitMQ 应用。此命令典型的用途是在执行了其他管理操作之后,重新启动之前停止的RabbitMQ 应用。
  • rabbitmqctl reset
    将RabbitMQ 节点重置还原到最初状态。包括从原来所在的集群中删除此节点,从管理数据库中删除所有的配置数据,如己配置的用户、vhost 等,以及删除所有的持久化消息。执行rabbitmqctl reset 命令前必须停止RabbitMQ 应用(比如先执行rabbitmqctl stop_app )。
  • rabbitmqctl force_reset
    强制将RabbitMQ 节点重置还原到最初状态。不同于rabbitmqctl reset 命令,rabbitmqctl force reset 命令不论当前管理数据库的状态和集群配置是什么,都会无条件地重直节点。它只能在数据库或集群配置己损坏的情况下使用。与rabbitmqctl reset命令一样,执行rabbitmqctl force reset 命令前必须先停止RabbitMQ 应用。

②集群管理(具体参考集群章节)

  • rabbitmqctl join_cluster {cluster_node} [--ram]
    将节点加入指定集群中。在这个命令执行前需要停止RabbitMQ 应用井重置节点。
  • rabbitmqctl cluster_status
    显示集群的状态。
  • rabbitmqctl change_cluster_node_type {disclram}
    修改集群节点的类型。在这个命令执行前需要停止RabbitMQ 应用。
  • rabbitmqctl forget_cluster_node [--offline]
    将节点从集群中删除,允许离线执行。
  • rabbitmqctl update_cluster_nodes {clusternode}
    在集群中的节点应用启动前咨询clusternode 节点的最新信息,井更新相应的集群信息。这个和join_cluster 不同,它不加入集群。
    考虑这样一种情况,节点A 和节点B 都在集群中,当节点A 离线了,节点C 又和节点B 组成了一个集群,然后节点B 又离开了集群,当A重新连上的时候,它会尝试联系节点B , 但是这样会失败,因为节点B 己经不在集群中了。rabbitmqctl update_cluster_nodes -n A C 可以解决这种场景下出现的问题。
  • rabbitmqctl force_boot
    确保节点可以启动,即使它不是最后一个关闭的节点。通常情况下, 当关闭整个RabbitMQ集群时,重启的第一个节点应该是最后关闭的节点,因为它可以看到其他节点所看不到的事情。但是有时会有一些异常情况出现,比如整个集群都掉电而所有节点都认为它不是最后一个关闭的。在这种情况下,可以调用rabbitmqctl f orce_boot 命令,这就告诉节点可以无条件地启动节点。在此节点关闭后,集群的任何变化,它都会丢失。如果最后一个关闭的节点永久丢失了,那么需要优先使用rabbitmqctl forget_cluster_node --offline 命令,因为它可以确保镜像队列的正常运转。
  • rabbitmqctl sync_queue [-p vhost] {queue}
    指示未同步队列queue 的slave 镜像可以同步master 镜像行的内容。同步期间此队列会被阻塞(所有此队列的生产消费者都会被阻塞〉,直到同步完成。此条命令执行成功的前提是队列queue 配置了镜像。注意,未同步队列中的消息被耗尽后,最终也会变成同步,此命令主要用于未耗尽的队列。
  • rabbitmqctl cancel_sync_queue [-p vhost] {queue}
    取消队列queue 同步镜像的操作。
  • rabbitmqctl set_cluster_ name {name}
    设置集群名称。集群名称在客户端连接时会通报给客户端。
    在这里插入图片描述

五、服务端状态

服务器状态的查询会返回一个以制表符分隔的列表, list_queues 、list_exchanges 、list_bindings 和list_consumers 这种命令接受一个可选的vhost 参数以显示其结果,默认值为“/ ”。
传参就不赘述了,都是它的一些属性。

  • rabbitmqctl list_queues [-p vhost] [queueinfoitem ... ]
    此命令返回队列的详细信息,如果无[-p vhost ]参数,将显示默认的vhost 为“/”中的队列详情。queueinfoitem 参数用于指示哪些队列的信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。
  • rabbitmqctl list_exchanges [-p vhost] [exchangeinfoitem ...]
    返回交换器的详细细节,如果无[ - p vhost ]参数,将显示默认的vhost 为“ / ”中的交换器详情。exchangeinfoitem 参数用于指示哪些信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。
  • rabbitmqctl list_bindings [-p vhost] [bindinginfoitem ... ]
    返回绑定关系的细节,如果无[-p vhost]参数,将显示默认的v hos t 为“/”中的绑定关系详情。bindinginfoitem 参数用于指示哪些信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。
  • rabbitmqctl list_connections [connectioninfoitem ... ]
    返回TCP/IP 连接的统计信息。connectioninfoitem 参数用于指示哪些信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。
  • rabbitmqctl list_channels [channelinfoitem . . . ]
    返回当前所有信道的信息。channelinfoitem 参数用于指示哪些信息项会包含在结果集中,结果集的列顺序将匹配参数的顺序。
  • rabbitmqctl list_consumers [-p vhost]
    列举消费者信息。
  • rabbitmqctl status
    显示Broker 的状态,比如当前Erlang 节点上运行的应用程序、RabbitMQ/Erlang 的版本信息、OS 的名称、内存及文件描述符等统计信息。
  • rabbitmqctl node_health_check
    对RabbitMQ 节点进行健康检查,确认应用是否正常运行、list queues 和list channels是否能够正常返回等。
  • rabbitmqctl environment
    显示每个运行程序环境中每个变量的名称和值。
  • rabbitmqctl report
    为所有服务器状态生成一个服务器状态报告,井将输出重定向到一个文件。
  • rabbitmqctl eval {expr}
    执行任意Erlang 表达式。

六、HTTP API接口管理

RabbitMQ Man agem ent 插件不仅提供了Web 管理界面, 还提供了HTTP API 接口来方便调用。比如创建一个队列,就可以通过PUT 方法调用/api/queues/vhost/name 接口来实现。
下面的示例通过curl 命令调用接口来完成队列queue 的创建:
注意下面命令中的“ %2F ”是指默认的vhost,即“/”,这类特殊字符在HTTP URL 中是需要转义的。
在这里插入图片描述
这里只给出一个范例,具体各个功能对应的URL及调用方法可以自行查阅资料。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Funnee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值