【RabbitMQ实战】05 RabbitMQ后台管理

一、多租户与权限

1.1 vhost的概念

每一个 RabbitMQ服务器都能创建虚拟的消息服务器,我们称之为虚拟主机(virtual host),简称为 vhost。每一个 vhost本质上是一个独立的小型RabbitMQ服务器,拥有自己独立的队列、交换器及绑定关系等,并且它拥有自己独立的权限。vhost 就像是虚拟机与物理服务器一样,它们在各个实例间提供逻辑上的分离,为不同程序安全保密地运行数据,它既能将同一个RabbitMQ中的众多客户区分开,又可以避免队列和交换器等命名冲突。vhost之间是绝对隔离的,无法将 vhostl 中的交换器与 vhost2中的队列进行绑定,这样既保证了安全性,又可以确保可移植性。如果在使用 RabbitMQ达到一定规模的时候,建议用户对业务功能、场景进行归类区分,并为之分配独立的vhost。

vhost 是 AMQP概念的基础,客户端在连接的时候必须制定一个vhost。RabbitMQ默认创建的vhost 为“/”,如果不需要多个 vhost 或者对 vhost的概念不是很理解,那么用这个默认的vhost 也是非常合理的,使用默认的用户名 guest 和密码 guest 就可以访问它。但是为了安全和方便,建议重新建立一个新的用户来访问它。

二、rabbitmqctl管理工具

下面我们用rabbitmqctl工具来进行后台管理工作

2.1 操作vhost

  • 添加
I have no name!@0d5cb60e3a06:/$ rabbitmqctl add_vhost vhost1
Adding vhost "vhost1" ...
  • 查询
I have no name!@0d5cb60e3a06:/$ rabbitmqctl list_vhosts
Listing vhosts ...
name
/
virtual01
vhost1
  • 删除
    刚才创建的vhost1被删除了
I have no name!@0d5cb60e3a06:/$ rabbitmqctl delete_vhost vhost1
Deleting vhost "vhost1" ...
I have no name!@0d5cb60e3a06:/$ rabbitmqctl list_vhosts
Listing vhosts ...
name
/
virtual01

2.2用户管理

  • 创建用户
I have no name!@0d5cb60e3a06:/$ rabbitmqctl add_user user1 123456
Adding user "user1" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.

-查询用户列表

I have no name!@0d5cb60e3a06:/$ rabbitmqctl list_users
Listing users ...
user	tags
admin	[administrator]
hello	[administrator]
  • 修改用户密码
I have no name!@0d5cb60e3a06:/$ rabbitmqctl change_password user1 111111
Changing password for user "user1" ...
  • 删除用户
I have no name!@0d5cb60e3a06:/$ rabbitmqctl delete_user user1
Deleting user "user1" ...

2.3权限

在RabbitMQ中权限控制是以vhost为单位的。
当创建一个用户时,用户通常会被指派给至少一个 vhost,并且只能访问被指派的 vhost 内的队列、交换器和绑定关系等。因此,RabbitMQ中的授予权限是指在vhost级别对用户而言的权限授予。

相关的授予权限命令为:
rabbitmqctl set_permissions [-p vhost] {user) {conf}{write}{read}
其中各个参数的含义如下所述。

  • vhost:授予用户访问权限的vhost名称,可以设置为默认值,即vhost为“/”。

  • user:可以访问指定 vhost的用户名。

  • conf:一个用于匹配用户在哪些资源上拥有可配置权限的正则表达式。

  • write:一个用于匹配用户在哪些资源上拥有可写权限的正则表达式。

  • read:一个用于匹配用户在哪些资源上拥有可读权限的正则表达式。

注:
可配置指的是队列和交换器的创建及删除之类的操作;
可写指的是发布消息;
可读指与消息有关的操作,包括读取消息及清空整个队列等。
  • 添加权限
I have no name!@0d5cb60e3a06:/$ rabbitmqctl set_permissions -p vhost1 user1 ".*" ".*" ".*"
Setting permissions for user "user1" in vhost "vhost1" ...

“.*” 这个.*号代表什么呢?
其实代码通配符,看下面的例子

I have no name!@0d5cb60e3a06:/$ rabbitmqctl set_permissions -p vhost1 user1 "^queue01.*" ".*" ".*"
Setting permissions for user "user1" in vhost "vhost1" ...
I have no name!@0d5cb60e3a06:/$ rabbitmqctl list_user_permissions user1
Listing permissions for user "user1" ...
vhost	configure	write	read
vhost1	^queue01.*	.*	.*

授权user1用户,在以“queue01”开头的资源上有可配置的权限,并在所有资源上有可写、可读的权限

  • 查询用户权限
I have no name!@0d5cb60e3a06:/$ rabbitmqctl list_permissions -p vhost1
Listing permissions for vhost "vhost1" ...
user	configure	write	read
user1	.*	.*	.*
I have no name!@0d5cb60e3a06:/$ rabbitmqctl list_user_permissions user1
Listing permissions for user "user1" ...
vhost	configure	write	read
vhost1	.*	.*	.*
  • 清除权限
I have no name!@0d5cb60e3a06:/$ rabbitmqctl clear_permissions -p vhost1 user1
Clearing permissions for user "user1" in vhost "vhost1" ...

2.4用户角色

用户角色作用在web管理插件下的,不要与permissions相混淆

用户角色tags可分为五类:

  • 超级管理员(administrator)可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
  • 监控者(monitoring) 可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
  • 策略制定者(policymaker)可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。但无法查看节点的相关信息(上图红框标识的部分)。 与administrator的对比,administrator能看到这些内容
  • 普通管理者(management) 仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
    其他 无法登陆管理控制台,通常就是普通的生产者和消费者。 了解了这些后,就可以根据需要给不同的用户设置不同的角色,以便按需管理。
    设置用户角色的命令为:

rabbitmqctl set_user_tags User Tag
User为用户名,
Tag为角色名(对应于上面的administrator,monitoring,policymaker,management,或其他自定义名称)。

也可以给同一用户设置多个角色,例如

rabbitmqctl set_user_tags user001 monitoring policymakertoring policymaker management

三、Web端管理

rabbitmqctl管理工具,通过命令行的方式,来进行管理工作。那有没有更友好的图形界面呢?有的。
RabbitMQ management插件可以提供Web管理界面用来管理如前面所述的虚拟主机、用户等,也可以用来管理队列、交换器、绑定关系、策略、参数等,还可以用来监控 RabbitMQ服务的状态及一些数据统计类信息,可谓是功能强大,基本上能够涵盖所有RabbitMQ管理的功能。

在使用Web管理界面之前需要先启用 RabbitMQ management插件。RabbitMQ提供了很多的插件,默认存放在$RABBITMQ_HOME/plugins 目录下,如下所示。

3.1插件的管理

  • 列出当前的启用的插件
I have no name!@0d5cb60e3a06:/opt/bitnami/rabbitmq/plugins$ rabbitmq-plugins list
Listing plugins with pattern ".*" ...
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status: * = running on rabbit@localhost
 |/
[  ] rabbitmq_amqp1_0                  3.9.11
[  ] rabbitmq_auth_backend_cache       3.9.11
[  ] rabbitmq_auth_backend_http        3.9.11
[  ] rabbitmq_auth_backend_ldap        3.9.11
[  ] rabbitmq_auth_backend_oauth2      3.9.11
[  ] rabbitmq_auth_mechanism_ssl       3.9.11
[  ] rabbitmq_consistent_hash_exchange 3.9.11
[  ] rabbitmq_event_exchange           3.9.11
[  ] rabbitmq_federation               3.9.11
[  ] rabbitmq_federation_management    3.9.11
[  ] rabbitmq_jms_topic_exchange       3.9.11
[E*] rabbitmq_management               3.9.11
[e*] rabbitmq_management_agent         3.9.11
[  ] rabbitmq_mqtt                     3.9.11
[  ] rabbitmq_peer_discovery_aws       3.9.11
[  ] rabbitmq_peer_discovery_common    3.9.11
[  ] rabbitmq_peer_discovery_consul    3.9.11
[  ] rabbitmq_peer_discovery_etcd      3.9.11
[  ] rabbitmq_peer_discovery_k8s       3.9.11
[  ] rabbitmq_prometheus               3.9.11
[  ] rabbitmq_random_exchange          3.9.11
[  ] rabbitmq_recent_history_exchange  3.9.11
[  ] rabbitmq_sharding                 3.9.11
[  ] rabbitmq_shovel                   3.9.11
[  ] rabbitmq_shovel_management        3.9.11
[  ] rabbitmq_stomp                    3.9.11
[  ] rabbitmq_stream                   3.9.11
[  ] rabbitmq_stream_management        3.9.11
[  ] rabbitmq_top                      3.9.11
[  ] rabbitmq_tracing                  3.9.11
[  ] rabbitmq_trust_store              3.9.11
[e*] rabbitmq_web_dispatch             3.9.11
[  ] rabbitmq_web_mqtt                 3.9.11
[  ] rabbitmq_web_mqtt_examples        3.9.11
[  ] rabbitmq_web_stomp                3.9.11
[  ] rabbitmq_web_stomp_examples       3.9.11

其中[E*]表示显示启动,[e*] 为隐式启动

  • 如何启用一个插件
    以上面代码为例,启用rabbitmq_web_mqtt插件
I have no name!@0d5cb60e3a06:/opt/bitnami/rabbitmq/plugins$ rabbitmq-plugins enable rabbitmq_web_mqtt
Enabling plugins on node rabbit@localhost:
rabbitmq_web_mqtt
The following plugins have been configured:
  rabbitmq_management
  rabbitmq_management_agent
  rabbitmq_mqtt
  rabbitmq_web_dispatch
  rabbitmq_web_mqtt
Applying plugin configuration to rabbit@localhost...
The following plugins have been enabled:
  rabbitmq_mqtt
  rabbitmq_web_mqtt

started 2 plugins.

再查询一下插件rabbitmq_web_mqtt那一行有了[E*],表示启用了

I have no name!@0d5cb60e3a06:/opt/bitnami/rabbitmq/plugins$ rabbitmq-plugins list
Listing plugins with pattern ".*" ...
 Configured: E = explicitly enabled; e = implicitly enabled
 | Status: * = running on rabbit@localhost
 |/
....
[E*] rabbitmq_web_mqtt                 3.9.11
....

3.2 web管理页面

能进入web管理页面的前提是启用了后台管理插件:rabbitmq_management
访问地址:http://192.168.56.201:15672/
其中192.168.56.201是我本机装有rabbitmq的机器ip

先按上面学的知识,添加一个用户,并且具有配置、读、写所有资源的权限,并且设置好administrator权限

I have no name!@0d5cb60e3a06:~$ rabbitmqctl add_user user1 123456
Adding user "user1" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.
I have no name!@0d5cb60e3a06:~$ rabbitmqctl set_permissions user1 ".*" ".*" ".*"
Setting permissions for user "user1" in vhost "/" ...
I have no name!@0d5cb60e3a06:~$ rabbitmqctl set_user_tags user1 administrator
Setting tags for user "user1" to [administrator] ...
I have no name!@0d5cb60e3a06:~$ rabbitmqctl list_permissions
Listing permissions for vhost "/" ...
user	configure	write	read
user1	.*	.*	.*
admin	.*	.*	.*

I have no name!@0d5cb60e3a06:~$ rabbitmqctl list_users
Listing users ...
user	tags
admin	[administrator]
user1	[administrator]
hello	[administrator]

登录成功
【RabbitMQ实战】05 RabbitMQ后台管理_第1张图片

3.3 virtual host的管理

【RabbitMQ实战】05 RabbitMQ后台管理_第2张图片

3.4用户的管理

【RabbitMQ实战】05 RabbitMQ后台管理_第3张图片

3.5 Connection,Channel,Exchange,Queues的管理

【RabbitMQ实战】05 RabbitMQ后台管理_第4张图片

你可能感兴趣的:(RabbitMQ实战,rabbitmq,ruby,分布式)