RabbitMQ管理(1)——多租户与权限

2024-09-02 11:08
文章标签 管理 权限 rabbitmq 租户

本文主要是介绍RabbitMQ管理(1)——多租户与权限,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。

欢迎跳转到本文的原文链接:https://honeypps.com/mq/rabbitmq-management-of-vhost/


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

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

可以使用rabbitmqctl add_vhost {vhost}命令创建一个新的vhost,大括号里的参数表示vhost的名称。示例如下:

[root@node1 ~]# rabbitmqctl add_vhost vhost1
Creating vhost "vhost1"

可以使用rabbitmqctl list_vhosts [vhostinfoitem…]来罗列当前vhost的相关信息。目前vhostinfoitem的取值有2个:

  1. name:表示vhost的名称。
  2. tracing:表示是否使用了RabbitMQ的trace功能。有关trace功能,详细可以参考10.1章节。

示例如下:

[root@node1 ~]# rabbitmqctl list_vhosts name tracing
Listing vhosts
vhost1      false
/       false
[root@node1 ~]# rabbitmqctl trace_on
Starting tracing for vhost "/"
[root@node1 ~]# rabbitmqctl list_vhosts name tracing
Listing vhosts
vhost1      false
/       true

对应的删除的vhost的命令是:rabbitmqctl delete_vhost {vhost},其中大括号里面的参数表示vhost的名称。删除一个vhost同时也会删除其下所有的队列、交换器、绑定关系、用户权限、参数以及策略等信息。示例如下:

[root@node1 ~]# rabbitmqctl delete_vhost vhost1
Deleting vhost "vhost1"
[root@node1 ~]# rabbitmqctl list_vhosts
Listing vhosts

AMQP协议中并没有指定权限在vhost级别还是在服务器端级别实现,由具体的应用自定义。在RabbitMQ中,权限控制则是以vhost为单位的。当创建一个用户时,用户通常会被指派给至少一个vhost,并且只能访问被指派vhost内的队列、交换器以及绑定关系。因此,RabbitMQ中的授予权限是指在vhost级别对用户而言的权限授予。

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

  1. vhost:授予用户访问权限的vhost名称,可以缺省,即vhost为"/"。
  2. user:可以访问指定vhost的用户名称。
  3. conf:一个用于匹配用户在哪些资源上拥有可配置权限的正则表达式。
  4. write:一个用于匹配用户在哪些资源上拥有可写权限的正则表达式。
  5. read:一个用于匹配用户在哪些资源上有用可读权限的正则表达式。

注:可配置指的是队列和交换器的创建以及删除之类的操作;可写指的是发布消息;可读指与消息有关的操作,包括读取消息以及清空整个队列等。

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

[root@node1 ~]# rabbitmqctl set_permissions -p vhost1 root ".*" ".*" ".*"
Setting permissions for user "root" in vhost "vhost1"

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

[root@node1 ~]# rabbitmqctl set_permissions -p vhost2 root "^queue.*" ".*" ".*"
Setting permissions for user "root" in vhost "vhost2"

清除权限也是在vhost级别对用户而言的清除权限。清除权限的命令为:rabbitmqctl clear_permissions [-p vhost] {username}。其中vhost用于设置禁止用户访问的虚拟主机的名称,默认为“/”;username表示禁止访问特定虚拟主机的用户名称。示例如下:

[root@node1 ~]# rabbitmqctl clear_permissions -p vhost1 root
Clearing permissions for user "root" in vhost "vhost1"

在RabbitMQ中有两个shell命令可以列举权限信息。第一个命令是:rabbitmqctl list_permissions [-p vhost],用来显示虚拟主机上的权限;第二个命令是:rabbitmqctl list_user_permissions {username},用来显示用户的权限。示例如下:

[root@node1 ~]# rabbitmqctl list_permissions -p vhost1
Listing permissions in vhost "vhost1"
root .*      .*      .*
[root@node1 ~]# rabbitmqctl list_user_permissions root
Listing permissions for user "root"
/       .*      .*      .*
vhost1      .*      .*      .*

细心的读者可能会注意到本章节中用到的所有命令都是rabbitmqctl工具的扩展命令,rabbitmqctl工具是用来管理RabbitMQ中间件的命令行工具,它通过连接各个RabbitMQ节点来执行所有操作。如果有节点没有运行,将会显示诊断信息、不能到达,或因不匹配的Erlang cookie(有关Erlang cookie的细节可以参考7.1章节)而拒绝连接。rabbitmqctl工具的标准语法如下:

rabbitmqctl [-n node] [-t timeout] [-q] {command} [command options...]

[-n node]
默认节点是"rabbit@hostname",此处的hostname是主机名称。在一个名为"node.hidden.com"的主机上, RabbitMQ Erlang node 的节点名称通常是rabbit@node (除非RABBITMQ_NODENAME参数在启动时设置了非默认值)。 hostname -s 的输出通常是"@" 标志后的东西。
[-q]
使用-q标志来启用quiet模式,这样可以屏蔽一些消息的输出。 默认不开启quiet模式。
[-t timeout]
操作超时时间(秒为单位)。只适用于“list”类型的命令。 默认是无穷大。
下面来演示下[-q]和[-t timeout]参数的用法和效果:

[root@node1 ~]# rabbitmqctl list_vhosts
Listing vhosts
/
[root@node1 ~]# rabbitmqctl list_vhosts -q
/
[root@node1 ~]# rabbitmqctl list_vhosts -q -t 1
/
[root@node1 ~]# rabbitmqctl list_vhosts -q -t 0
Error: {timeout,0.0}

欢迎跳转到本文的原文链接:https://honeypps.com/mq/rabbitmq-management-of-vhost/


欢迎支持笔者新作:《深入理解Kafka:核心设计与实践原理》和《RabbitMQ实战指南》,同时欢迎关注笔者的微信公众号:朱小厮的博客。


这篇关于RabbitMQ管理(1)——多租户与权限的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1129785

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

SpringBoot中使用 ThreadLocal 进行多线程上下文管理及注意事项小结

《SpringBoot中使用ThreadLocal进行多线程上下文管理及注意事项小结》本文详细介绍了ThreadLocal的原理、使用场景和示例代码,并在SpringBoot中使用ThreadLo... 目录前言技术积累1.什么是 ThreadLocal2. ThreadLocal 的原理2.1 线程隔离2

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

Linux内存泄露的原因排查和解决方案(内存管理方法)

《Linux内存泄露的原因排查和解决方案(内存管理方法)》文章主要介绍了运维团队在Linux处理LB服务内存暴涨、内存报警问题的过程,从发现问题、排查原因到制定解决方案,并从中学习了Linux内存管理... 目录一、问题二、排查过程三、解决方案四、内存管理方法1)linux内存寻址2)Linux分页机制3)

Java访问修饰符public、private、protected及默认访问权限详解

《Java访问修饰符public、private、protected及默认访问权限详解》:本文主要介绍Java访问修饰符public、private、protected及默认访问权限的相关资料,每... 目录前言1. public 访问修饰符特点:示例:适用场景:2. private 访问修饰符特点:示例:

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

Linux中chmod权限设置方式

《Linux中chmod权限设置方式》本文介绍了Linux系统中文件和目录权限的设置方法,包括chmod、chown和chgrp命令的使用,以及权限模式和符号模式的详细说明,通过这些命令,用户可以灵活... 目录设置基本权限命令:chmod1、权限介绍2、chmod命令常见用法和示例3、文件权限详解4、ch

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

Springboot使用RabbitMQ实现关闭超时订单(示例详解)

《Springboot使用RabbitMQ实现关闭超时订单(示例详解)》介绍了如何在SpringBoot项目中使用RabbitMQ实现订单的延时处理和超时关闭,通过配置RabbitMQ的交换机、队列和... 目录1.maven中引入rabbitmq的依赖:2.application.yml中进行rabbit