5.1 多租户管理
每个RabbitMQ服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(virtual host),简称为vhost,每一个vhost本质上是一个独立的小型RabbitMQ服务器,拥有自己独立的队列、交换器、绑定关系等,并且它拥有自己独立的权限,vhost之间是绝对隔离的,vhost是AMQP的基础,客户端在连接的时候必须指定一个,默认为"/",添加和删除vhost的相关命令如下:
- rabbitmqctl add_vhost vhost1
- rabbitmqctl delete_vhost vhost1
在RabbitMQ中,权限控制是以vhost为单位的,当创建一个用户时,用户通常会被指派至少一个vhost,并且只能访问被指派的vhost内的队列,相关的授权命令为:rabbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read},各个参数说明如下: - vhost:授予用户访问权限的vhost名称
- user:可以访问指定vhost的用户名
- conf:用于匹配用户在哪些资源上拥有可配置权限的正则表达式
- write:在哪些资源上拥有可写资源的正则表达式
- read:用户在哪些资源上拥有可读权限的正则表达式
同时,消除权限也是在vhost级别对用户而言的,命令为:rabbitmqctl clear_permissions [-p vhost] {username};
其中,rabbitmqctl是用来管理RabbitMQ中间件的命令行工具。
5.2 用户管理
这里简单介绍几个命令:
创建用户:rabbitmqctl add_user root root123
修改密码:rabbitmqctl change_password root root321
删除用户:rabbitmqctl delete_user root
用户列表:rabbitmqctl list_users
用户的角色(tag)分为五种类型:
- none:默认角色,即无任何角色
- management:可以访问web管理页面
- policymaker:包含management的所有权限,并且可以管理策略(policy)和参数
- monitoring:包含management的所有权限,并且可以看到所有连接、信道及节点的相关信息
- administrator:包含monitoring的所有权限,并且可以管理用户、虚拟主机、权、策略、参数等,代表了最高权限
设置用户的权限:rabbitmqctl set_user_tags root monitoring
5.3 Web端管理
rabbitmqctl不太好用,所以RabbitMQ的开发团队开发了RabbitMQ management插件(同样是由Erlang语言编写)来提供一个Web管理二面用来管理RabbitMQ,使用Web界面之前首先要启动RabbitMQ management插件
5.4 应用与集群管理
5.4.1 应用管理
rabbitmqctl shutdown:停止运行RabbitMQ的Erlang虚拟机和RabbitMQ服务应用,如果RabbitMQ服务关闭失败,则会返回一个非零值;
rabbitmqctl stop_apo:停止RabbitMQ,但是Erlang虚拟机还在运行;
rabbitmqctl start_app:执行了其他管理操作之后,从新启动之前挺值得RabbitMQ应用;
rabbitmqctl reset:将RabbitMQ节点重置还原到最初状态;
5.4.2 集群管理
rabbitmqctl join_cluster:将节点加入指定集群
rabbitmqctl cluster_status:显示集群的状态
rabbitmqctl change_cluster_node_type:修改集群节点的类型
rabbitmqctl forget_cluster_node:将节点从集群中删除
rabbitmqctl set_cluster_name:设置集群名称
5.5 服务的状态
rabbitmqctl list_queues name durable:列出所有的队列,返回值包含名称、是否、持久化;
rabbitmqctl list_exchangees
rabbitmqctl list_bindings
rabbitmqctl list_connections
…
rabbitmqctl status:显示broker的状态
用户、Parameter、vhost、权限等都可以通过rabbitmqctl工具来完成,反观队列、交换器、绑定关系等的创建则无法用rabbitmqctl完成,到目前为止介绍的只有通过客户端或者Web管理界面完成,这对于ctl爱好者十分遗憾,于是,可以通过eval扩展来实现,命令太过于复杂,这里不做展示。
5.6 HTTP API接口管理
RabbitMQ Management插件不见提供了Web界面,还提供了HTTP API接口来方便调用,比如创建一个队列就可以通过/api/queues/vhos/name接口来实现。
…
如果是使用curl来调用HTTP API,或许,RabbitMQ Management提供的rabbitmqadmin会显得更加方便,它包装了HTTP API接口,比如创建一个队列可以使用如下命令:
./rabbitmqadmin -u rrot -p root123 declare queue name=queue1
5.7 小结
本章主要介绍了RabbitMQ的管理,不必死背命令,可以作为一个手册用来查阅,rabbitmqctl是RabbitMQ中提供的最为复杂的cli管理工具,还有一个重点就是rabbitmqctl management这个插件,他不仅提供了Web管理页面,还提供了HTTP API以及rabbitmqadmin。