【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_managementrabbitmq_management_agentrabbitmq_mqttrabbitmq_web_dispatchrabbitmq_web_mqtt
Applying plugin configuration to rabbit@localhost...
The following plugins have been enabled:rabbitmq_mqttrabbitmq_web_mqttstarted 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.rhkb.cn/news/141497.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

知识储备--基础算法篇-贪心算法

1.贪心算法 1.1贪心算法与背包问题的区别 贪心算法能够通过局部最优去推出全局最优,而背包问题不行,需要用动态规划的方法来解决。 1.2套路 贪心算法没有套路!! 主要想清楚怎么得到该阶段的局部最优解,如何通过局…

spring的ThreadPoolTaskExecutor装饰器传递调用线程信息给线程池中的线程

概述 需求是想在线程池执行任务的时候,在开始前将调用线程的信息传到子线程中,在子线程完成后,再清除传入的数据。 下面使用了spring的ThreadPoolTaskExecutor来实现这个需求. ThreadPoolTaskExecutor 在jdk中使用的是ThreadPoolExecutor…

前端web常用的基础案例

html案例&#xff1a; <!DOCTYPE html> <html> <head><title>My Website</title> </head> <body><header><h1>Welcome to My Website</h1><nav><ul><li><a href"#">Home</a…

阿里云效自动构建python自动测试脚本

之前一直用的是jenkins自动构建自动化脚本&#xff0c;因为现在的公司统一在阿里云效的流水线上做代码的管理&#xff0c;构建&#xff0c;要求自动化测试也在上面自动构建&#xff0c;故而学习了一下。为自己做一个记录&#xff0c;也给有需要的朋友做一个参考。 1. 新建流水…

Mysql备份恢复、与日志管理

Mysql日志管理、备份与恢复 一、Mysql日志管理1.1、日志分类1.1.1、错误日志1.1.2 、通用查询日志1.1.3、 二进制日志1.1.4 、慢查询日志1.1.5 、配置日志 1.2、日志的查询 二、备份与恢复2.1、 数据备份的必要性2.2 、造成数据丢失的原因2.3、 数据库备份的分类2.3.1、 物理备…

python 正则表达式

一、特殊字符-需要转义 eg&#xff1a;转义符&#xff1a; 待匹配的字符串&#xff1a;lr的值&#xff0c;及下图中字符串lr[和字符串&#xff0c;之间的数据 正则写法&#xff1a; learning_rate re.findall(".*lr\[(.*?), *", content) 处理结果&#xff1a;…

OpenCV实现模板匹配和霍夫线检测,霍夫圆检测

一&#xff0c;模板匹配 1.1代码实现 import cv2 as cv import numpy as np import matplotlib.pyplot as plt from pylab import mplmpl.rcParams[font.sans-serif] [SimHei]#图像和模板的读取 img cv.imread("cat.png") template cv.imread(r"E:\All_in\o…

Learn Prompt- Midjourney Prompt:Prompt 提示语

基础结构​ 一个基本的提示可以简单到一个单词、短语或表情符号。非常短的提示将在很大程度上依赖于 Midjourney 的默认样式。 完整 prompt&#xff1a;可以包括一个或多个图像链接、多个文本短语或单词&#xff0c;以及一个或多个后缀参数 Image Prompts: 可以将图像 URL 添加…

github代码提交过程详细介绍

1、下载github上面的代码 &#xff08;1&#xff09;在github网站上&#xff0c;找到想要下载的代码仓库界面&#xff0c;点击Code选项就可以看到仓库的git下载地址&#xff1b; &#xff08;2&#xff09;使用命令下载&#xff1a;git clone 地址&#xff1b; 2、配置本地git…

中国制造让苹果跪服,将再增加一家中国高科技供应商

日前产业链人士指出由于京东方的OLED面板有力地制衡韩国面板厂商三星和LGD&#xff0c;促使他们降价&#xff0c;而且技术也不错&#xff0c;因此正计划再引入一家中国OLED面板厂商&#xff0c;以进一步促进OLED面板的竞争。 早期苹果的OLED面板完全由三星供应&#xff0c;由此…

什么是AI问答机器人?它的应用场景有哪些?

近年来&#xff0c;由于技术的进步和对个性化客户体验的需求不断增长&#xff0c;AI问答机器人也是获得了巨大的关注。AI问答机器人&#xff0c;也被称为AI聊天机器人&#xff0c;是一种旨在模拟人类对话并通过基于文本或语音的界面与用户交互的计算机程序。其能够自动执行各种…

Java-day17(反射)

Reflection(反射) 动态语言的关键 允许程序在执行期借助于Reflection API取得任何类的内部信息&#xff0c;并能直接操作任意对象的内部属性及方法提供的功能: 在运行时判断任意一个对象所属类 在运行时构造任意一个类的对象 在运行时判断任意一个类所具有的成员变量和方法 在…

分享从零开始学习网络设备配置--任务3.7 使用动态路由RIPv2实现网络连通

任务描述 某公司随着规模的不断扩大&#xff0c;路由器的数量开始有所增加。网络管理员发现原有的静态路由已经不适合现在的公司&#xff0c;实施动态路由RIPv2协议配置&#xff0c;实现网络中所有主机之间互相通信。 在路由器较多的网络环境中&#xff0c;手工配置静态路由…

回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于RF-Adaboost随机森林结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于RF-Adaboost随机森林结合…

云安全之访问控制介绍

访问控制技术背景 信息系统自身的复杂性、网络的广泛可接入性等因素&#xff0c;系统面临日益增多的安全威胁&#xff0c;安全问题日益突出&#xff0c;其中一个重要的问题是如何有效地保护系统的资源不被窃取和破坏。 访问控制技术内容包括访问控制策略、访问控制模型、访问…

力扣26:删除有序数组中的重复项

26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 题目&#xff1a; 给你一个 非严格递增排列 的数组 nums &#xff0c;请你 原地 删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 …

混合Rollup:探秘 Metis、Fraxchain、Aztec、Miden和Ola

1. 引言 混合Rollup为新的以太坊L2扩容方案&#xff0c;其分为2大类&#xff1a; 将乐观与ZK技术结合的混合Rollup同时支持公开智能合约 和 私人智能合约 的混合Rollup 本文将重点关注Metis、Fraxchain、Aztec、Miden和Ola这五大项目。 2. 何为混合Rollup&#xff1f; 混合…

el-table实现穿梭功能

第一种 <template><el-row :gutter"20"><el-col :span"10"><!-- 搜索 --><div class"search-bg"><YcSearchInput title"手机号" v-model"search.phone" /><div class"search-s…

Spring面试题21:说一说Spring的@Required注解和@Qualifier注解

该文章专注于面试,面试只要回答关键点即可,不需要对框架有非常深入的回答,如果你想应付面试,是足够了,抓住关键点 面试官:说一说Spring的@Required注解 @Required ,用于标记在注入的属性上。它表示被注解的属性在配置 Bean 的时候是必需的,如果没有正确配置,则会抛出…

C# OpenCvSharp 基于直线检测的文本图像倾斜校正

效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using OpenCvSharp;namespace OpenCvSharp_基于直线检测的文…