rabbitmq管理

本文详细介绍了RabbitMQ的管理工具rabbitmqctl,包括虚拟主机(vhost)的创建与管理、权限控制机制以及用户管理。RabbitMQ的权限是以vhost为单位,用户可以通过命令行工具设置不同级别的访问权限,如配置、写入和读取。此外,还阐述了如何使用rabbitmqctl进行应用管理和维护操作,如启动、停止、重置等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

rabbitmq 工具

  1. rabbitmqctl (命令行)
  2. rabbitmq_management (图形化)

abbitmqctl工具是用来管理RabbitMQ中间件的命令行工具,它通过连接各个RabbitMQ节点来执行所有操作。如果有节点没有运行,将会显示诊断信息、不能到达,或因不匹配的Erlang cookie(有关Erlang cookie的细节可以参考7.1章节)而拒绝连接。

rabbitmqctl 标准语法:

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

# rabbitmqctl  
Error: could not recognise command
Usage:
rabbitmqctl [-n <node>] [-q] <command> [<command options>] 

Options:
    -n node
    -q

Default node is "rabbit@server", where server is the local host. On a host 
named "server.example.com", the node name of the RabbitMQ Erlang node will 
usually be rabbit@server (unless RABBITMQ_NODENAME has been set to some 
non-default value at broker startup time). The output of hostname -s is usually 
the correct suffix to use after the "@" sign. See rabbitmq-server(1) for 
details of configuring the RabbitMQ broker.

一. 多租户 虚拟主机和隔离

RabbitMQ is multi-tenant system: connections, exchanges, queues, bindings, user permissions, policies and some other things belong to virtual hosts, logical groups of entities.
In RabbitMQ, virtual hosts are created and deleted using rabbitmqctl or HTTP API instead.

每个rabbitmq服务器都能创建虚拟的消息服务器, 称为虚拟主机(virtual host)简称vhost

vhost本质是一个独立的小型rabbitmq服务器,有独立的交换机,队列,独立的权限,账户管理等

vhost之间是绝对隔离的,无法将vhost1与vhost2总的队列进行绑定

vhost就像虚拟机与物理机, 在实例间提供逻辑隔离,保证安全

RabbitMQ初次启动时,初始创建两个默认, 默认vhost, 默认用户:

  • 一个名称为"/"的vhost

  • guest用户,拥有/的全部权限,只能localhost访问 (guest用户名密码guest/guest)

vhost是AMQP概念的基础,客户端在连接的时候必须指定一个vhost

添加vhost:

创建virtual hosts会阻塞整个集群,比较耗性能

rabbitmqctl add_vhost vhost1
# rabbitmqctl add_vhost vhost1
Creating vhost "vhost1" ...
...done.

查询vhost的相关信息

rabbitmqctl list_vhosts name tracing (name: vhost1  是否使用trace功能)
[root@node ~]# rabbitmqctl list_vhosts
Listing vhosts ...
/
vhost1
...done.
[root@node ~]# rabbitmqctl list_vhosts name tracing
Listing vhosts ...
/       false
vhost1  false
...done.

启动trace功能

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

关闭trace功能

rabbitmqctl trace_off
[root@mirror ~]# rabbitmqctl trace_off
Stopping tracing for vhost "/" ...
...done.
[root@mirror ~]# rabbitmqctl list_vhosts name tracing
Listing vhosts ...
/       false
vhost1  false
...done.

删除vhost,名为(vhost1)

rabbitmqctl delete_vhost vhost1
# rabbitmqctl delete_vhost vhost1
Deleting vhost "vhost1" ...
...done.
# rabbitmqctl list_vhosts
Listing vhosts ...
/
...done.

二. 权限

AMQP协议中并没有指定权限在vhost级别还是在服务器端级别实现

RabbitMQ中,权限控制则是以vhost为单位的。创建用户时,用户被指派给至少一个vhost,并且只能访问被指派vhost内的队列、交换器以及绑定关系

当用户访问MQ时,首先触发第一级控权,判断用户是否有访问该virtual host的权限。

若可访问,则进行第二级控权,判断用户是否具有操作(operation)所请求的资源的权限。

abbitmqctl set_permissions [-p vhost] {user} {conf} {write} {read}

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

可写指的是可以发布消息

可读指的是与消息有关的操作, 包含读取消息,清空消息队列

例如:

rabbitmqctl set_permissions -p vhost1 root ".*" ".*" ".*"
# 授予用户root可访问虚拟主机vhost2,在以“queue”开头的资源上具备可配置权限,并在所有资源上拥有可写、可读的权限
rabbitmqctl set_permissions -p vhost2 root "^queue.*" ".*" ".*"

权限删除:

rabbitmqctl clear_permissions [-p vhost] {username}

rabbitmqctl clear_permissions -p vhost1 root

查看权限

rabbitmqctl list_permissions [-p vhost]

rabbitmqctl list_permissions -p vhost1

用户管理:

rabbitmq用户管理是基于vhost的, 用户是访问控制的基本单元, 单个用户可以跨越多个vhost进行授权,每个vhost, 用户可以被设置为不同的权限

用户创建

rabbitmqctl add_user root root123
# rabbitmqctl add_user root root123
Creating user "root" ...
...done.

用户删除

rabbitmqctl delete_user root

root@node app]# rabbitmqctl delete_user root
Deleting user "root" ...
[root@node app]# 
[root@node app]# rabbitmqctl list_users
Listing users ...
user    tags
admin   [administrator]
guest   [administrator]

用户重置密码

rabbitmqctl change_password root abc321

# rabbitmqctl change_password root abc321
Changing password for user "root" ...
...done.

清除密码, 清除密码后,用户不能使用密码进行登录

rabbitmqctl clear_password root

[root@node app]# rabbitmqctl clear_password root
Clearing password for user "root" ..

# rabbitmqctl authenticate_user root abc321
Authenticating user "root" ...
Error: failed to authenticate user "root"
user 'root' - invalid credentials

用户密码验证

rabbitmqctl authenticate_user {username} {password}

[root@node app]# rabbitmqctl authenticate_user root abc321
Authenticating user "root" ...
Success
[root@node app]# rabbitmqctl authenticate_user root abc3x
Authenticating user "root" ...
Error: failed to authenticate user "root"
user 'root' - invalid credentials
[root@node app]# 

查询所有用户

rabbitmqctl list_users

# rabbitmqctl list_users
Listing users
guest        [administrator]
root          []

用户 紧跟的用户的角色(tags)

角色类型:

  1. none:无任何角色。新创建的用户的角色默认为none。
  2. management:可以访问Web管理页面
  3. policymaker:包含management的所有权限,并且可以管理策略(policy)和参数(parameter)
  4. monitoring:包含management的所有权限,并且可以看到所有连接(connections)、信道(channels)以及节点相关的信息
  5. administartor:包含monitoring的所有权限,并且可以管理用户、虚拟主机、权限、策略、参数等等。 administator代表了最高的权限。

用户角色设置:

rabbitmqctl set_user_tags {username} {tag …}

tag参数用于设置0个、1个或者多个的角色,设置之后任何之前现有的身份都会被删除, 即是覆盖现有角色, 要保留原有角色需提供完整列表。

rabbitmqctl set_user_tags root monitoring,administator

应用管理

rabbitmqctl stop [pid_file]
用于停止运行RabbitMQ的Erlang虚拟机和RabbitMQ服务应用。
如果指定了pid_file,还需要等待指定进程的结束, pidfile 默认情况下存放于Mnesia目录中rabbitmq/mnesia/rabbit@node1.pid
设置pid路径: 设置RABBITMQ_PID_FILE环境变量存放路径。
如果是rabbitmq-server –detach启动的RabbitMQ服务则不会生成pid_file这个文件

rabbitmqctl shutdown
用于停止运行RabbitMQ的Erlang虚拟机和RabbitMQ服务应用。
执行这个命令会阻塞直到Erlang虚拟机进程的退出

rabbitmqctl stop_app

停止RabbitMQ服务应用,但是Erlang虚拟机还是处于运行状态。
此命令优先执行其他管理操作(这些管理操作需要先停止RabbitMQ应用),比如rabbitmqctl reset

rabbitmqctl start_app
启动RabbitMQ应用。
此命令典型的用途是在执行了其他管理操作之后,重新启动之前停止的RabbitMQ应用,譬如rabbitmqctl reset

rabbitmqctl wait [pid_file]
等待RabbitMQ应用的启动。
它会等到pid_file的创建,然后等待pid_file中的所代表的进程启动

rabbitmqctl reset
将RabbitMQ节点重置还原到最初状态,包括从原所在的集群中删除此节点,从管理数据库中删除所有的配置数据,如已配置的用户、vhost等,以及删除所有的持久化消息。
执行rabbitmqctl reset命令前必须停止RabbitMQ应用(比如先执行rabbitmqctl stop_app)

rabbitmqctl force_reset
强制将RabbitMQ节点重置还原到最初状态。
abbitmqctl force_reset命令不论当前管理数据库的状态和集群配置是什么,会无条件地重置节点。它只能在数据库或集群配置已损坏的情况下才可使用。执行rabbitmqctl force_reset命令前必须先停止RabbitMQ应用

rabbitmqctl rotate_logs {suffix}
指示RabbitMQ节点轮换日志文件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值