【RabbitMQ实战】05 RabbitMQ后台管理

news2024/12/24 3:36:30

一、多租户与权限

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]

登录成功
在这里插入图片描述

3.3 virtual host的管理

在这里插入图片描述

3.4用户的管理

在这里插入图片描述

3.5 Connection,Channel,Exchange,Queues的管理

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1041179.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

高级时钟项目(2)Json文件解析学习---C语言版本

笔者来介绍一下json文件解析 1、背景介绍 笔者在获取天气数据的时候,是通过MCU的WIFI去获取,但是获取到的数据json数据,需要解析,C语言没那么解析库,所以就需要找一些开源的解析库。 笔者找到cjson这个适用于C语言…

洗衣行业在线预约小程序系统源码搭建 支持直播功能+在线预约下单+上门取件

目前,人们对生活品质的追求不断提高,但生活节奏却也不断加快。对品质的追求遇到了忙碌的生活节奏,人们更渴望以最简单、便捷的方式达到追求品质的目的。同时,由于线上支付的普及,大家更希望足不出户就可以解决自己生活…

基于规则架构-架构案例2019(三十九)

电子商务 某电子商务公司为了更好地管理用户,提升企业销售业绩,拟开发一套用户管理系统。该系统的基本功能是根据用户的消费级别、消费历史、信用情况等指标将用户划分为不同的等级,并针对不同等级的用户提供相应的折扣方案。在需求分析与架…

AGV小车、机械臂协同作业实战06-任务分配算法(图解蚁群算法)代码示例java

什么是蚁群算法? 蚁群系统(Ant System(AS)或Ant Colony System(ACS))是由意大利学者Dorigo、Maniezzo等人于20世纪90年代首先提出来的。他们在研究蚂蚁觅食的过程中,发现蚁群整体会体现一些智能的行为,例如蚁群可以在不同的环境下&#xff0c…

计算机竞赛 深度学习乳腺癌分类

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度,召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

【湖科大教书匠】计算机网络随堂笔记第5章(计算机网络运输层)

目录 5.1、运输层概述 概念 进程之间的通信 进程之间通信流程 总结 5.2、运输层端口号、复用与分用的概念 为什么用端口号 发送方的复用和接收方的分用 ​编辑 ​编辑 运输层传输流程 5.3、UDP和TCP的对比 概念 用户数据报协议UDP(User Datagram Protocol&#xf…

P2PNet-Soy原理梳理

前文总结了P2PNet源码以及P2PNet-Soy源码实现方法,相关链接如下: 人群计数P2PNet论文:[2107.12746] Rethinking Counting and Localization in Crowds:A Purely Point-Based Framework (arxiv.org) p2p人群计数源码:GitHub - Te…

商品秒杀系统整理

1、使用redis缓存商品信息 2、互斥锁解决缓存击穿问题,用缓存空值解决缓存穿透问题。 3、CAS乐观锁解决秒杀超卖的问题 4、使用redission实现一人一单。(分布式锁lua)脚本。 5、使用lua脚本进行秒杀资格判断(将库存和用户下单…

三维模型3DTile格式轻量化压缩在移动智能终端应用方面的重要性分析

三维模型3DTile格式轻量化压缩在移动智能终端应用方面的重要性分析 随着移动智能终端设备的不断发展和普及,如智能手机、平板电脑等,以及5G网络技术的推广应用,使得在这些设备上频繁使用三维地理空间数据成为可能。然而,由于这类数…

协议-TCP协议-基础概念02-TCP握手被拒绝-内核参数-指数退避原则-TCP窗口-TCP重传

协议-TCP协议-基础概念02-TCP握手被拒绝-TCP窗口 参考来源: 《极客专栏-网络排查案例课》 TCP连接都是TCP协议沟通的吗? 不是 如果服务端不想接受这次握手,它会怎么做呢? 内核参数中与TCP重试有关的参数(两个) -net.ipv4.tc…

umi+React项目引入字体文件

1. 在public下新建文件夹fonts,将字体文件复制到该文件夹下 2. 在public文件下新建font.css文件 font-face {font-family: YouSheBiaoTiHei;src: url(./fonts/YouSheBiaoTiHei-2.ttf); }3. 在app.ts里面加上导入语句即可引入该字体 import ../public/font.css;

似然和概率

前言 高斯在处理正态分布的首次提出似然,后来英国物理学家,费歇尔 概率是抛硬币之前,根据环境推断概率 似然则相反,根据结果推论环境 P是关于x的函数,比如x为正面朝上的结果,或者反面朝上的结果&#xf…

【计算机网络】基于UDP的简单通讯(服务端)

文章目录 流程代码实现加载库创建套接字绑定ip接收数据发送数据关闭套接字、卸载库 流程 我们UDP通讯就像是在做小买卖,主要就是进行收发数据 实现UDP协议的服务端需要经过五步操作: 加载库(Ws2_32.lib)创建套接字&#xff08…

vue组件的通信

文章目录 组件通信父传子父传子:通过prop来进行通信 子传父先在父组件用注册方法 , 在子组件触发使用 emit 函数 组件间通信-平行组件使用事件总线的方法,也就是把整个vue提出来,当为一个事件总线 其他组件通信父组件 provide来提供变量,然后再子组件中通过inject来注入变量 组…

Java之IO流概述

1.1 什么是IO 生活中,你肯定经历过这样的场景。当你编辑一个文本文件,忘记了ctrls ,可能文件就白白编辑了。当你电脑上插入一个U盘,可以把一个视频,拷贝到你的电脑硬盘里。那么数据都是在哪些设备上的呢?键…

FlashDuty Changelog 2023-09-21 | 自定义字段和开发者中心

FlashDuty:一站式告警响应平台,前往此地址免费体验! 自定义字段 FlashDuty 已支持接入大部分常见的告警系统,我们将推送内容中的大部分信息放到了 Lables 进行展示。尽管如此,我们用户还是会有一些扩展或定制性的需求…

【yolov5】detect.py

执行方法: 代码 # YOLOv5 🚀 by Ultralytics, AGPL-3.0 license """ Run YOLOv5 detection inference on images, videos, directories, globs, YouTube, webcam, streams, etc.Usage - sources:$ python detect.py --weights yolov5s.pt --source …

面经分享 | 某康安全开发工程师

本文由掌控安全学院 - sbhglqy 投稿 一、反射型XSS跟DOM型XSS的最大区别 DOM型xss和别的xss最大的区别就是它不经过服务器,仅仅是通过网页本身的JavaScript进行渲染触发的。 二、Oracle数据库了解多吗 平常用的多的是MySQL数据库,像Oracle数据库也有…

PHP脚本导出MySQL数据库

背景:有时候需要同步数据库的表结构和部分数据,同步全表数据非常大,也不适合。还有一个种办法是使用数据库的dump命令执行备份,无法进入服务器?没有权限怎么办? 这里只要能访问服务器中的 information_sch…

前端项目练习(练习-003-webpack-01)

学习webpack前,首先,创建一个web-003项目,内容和web-002一样。(注意将package.json中的name改为web-003) 想想,我们开发Java 的时候,Maven帮我们做的主要是编译,打包等等内容。开发前…