欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

程序员文章站 2022-07-11 08:00:13
上一篇博客 "RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例" 中,我们成功的安装好了RabbitMQ环境,并通过一个Java客户端示例了解了用生产者来发布消息,用消费者来消费消息。 本篇博客主要讲解下RabbitMQ如何管理用户(新增/删除/修改密码),如何 ......

上一篇博客 rabbitmq使用教程(一)rabbitmq环境安装配置及hello world示例 中,我们成功的安装好了rabbitmq环境,并通过一个java客户端示例了解了用生产者来发布消息,用消费者来消费消息。

本篇博客主要讲解下rabbitmq如何管理用户(新增/删除/修改密码),如何给用户设置角色,如何设置用户权限,接下来,我们一一讲解。

1.用户管理

1.1查看用户列表

rabbitmq安装完成后,会有一个默认用户(guest guest),那么我们如何查看用户列表呢?

有2种方式,第1种是登录管理后台http://localhost:15672/,在界面中查看:

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

第2种方式是通过命令查看:

cd e:\program files\rabbitmq server\rabbitmq_server-3.7.15\sbin

rabbitmqctl.bat list_users

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

注意:第1个命令中的路径修改为你机器rabblitmq的安装路径。

1.2新建用户

在实际的使用过程中,不可能只存在这1个用户,有时我们需要新建1个用户给到开发人员使用,比如新建个用户developer 123456。

仍然有2种方式,第1种方式是通过管理后台新建:

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

第2种方式是通过命令新增:

 rabbitmqctl.bat add_user developer 123456

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

细心的网友也许会问为啥用户guest的tags是[administrator],而新建的用户developer的tags是[]呢,别着急,这一点会在下面的2.角色设置中讲解。

1.3删除用户

在实际使用过程中,删除用户的场景肯定也是存在的,比如我想把刚刚新建的用户developer删除掉。

仍然有2种方式,第1种方式是通过管理后台新建:

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

第2种方式是通过命令删除:

rabbitmqctl.bat delete_user developer

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

因为后面还要使用用户developer,删除完可以再新增回来。

1.4修改密码

可能有人会觉得123456这种密码,太简单了,不安全,我要修改成developer123456。

仍然有2种方式,第1种方式是通过管理后台修改密码:

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

第2种方式是通过命令修改密码:

rabbitmqctl change_password developer developer123456

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

2.角色设置

rabbitmq中主要有administrator,monitoring,policymaker,management,impersonator,none几种角色。

默认的用户guest是administrator角色,新建的developer用户没有设置角色,即为none,如果我们想把developer用户设置为administrator角色,第1种方式是通过界面修改:

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

也可以通过以下命令来修改:

rabbitmqctl.bat set_user_tags developer administrator

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

也可以给用户设置多个角色,如给用户developer设置administrator,monitoring:

rabbitmqctl.bat set_user_tags developer administrator monitoring

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

注意:如果是设置多个角色,管理界面用,分隔,命令用空格分隔。

关于这几种角色之间的区别,目前我还没有看到很好的文章讲解的很清楚,为了不误导用户,这里就先不讲解了,

暂且先设置为超级管理员administrator即可。

3.权限配置

3.1设置用户权限

让我们适当修改下上篇博客中的生产者类,使用新建的用户developer:

package com.zwwhnly.springbootaction.rabbitmq.helloworld;

import com.rabbitmq.client.channel;
import com.rabbitmq.client.connection;
import com.rabbitmq.client.connectionfactory;

import java.io.ioexception;
import java.util.concurrent.timeoutexception;

public class producer {
    private final static string queue_name = "hello";

    public static void main(string[] args) throws ioexception, timeoutexception {
        // 创建连接
        connectionfactory factory = new connectionfactory();
        // 设置 rabbitmq 的主机名
        factory.sethost("localhost");

        factory.setusername("developer");
        factory.setpassword("developer123456");
        factory.setport(5672);

        // 创建一个连接
        connection connection = factory.newconnection();
        // 创建一个通道
        channel channel = connection.createchannel();
        // 指定一个队列,不存在的话自动创建
        channel.queuedeclare(queue_name, false, false, false, null);
        // 发送消息
        string message = "hello world!";
        channel.basicpublish("", queue_name, null, message.getbytes());
        system.out.println(" [x] sent '" + message + "'");
        // 关闭频道和连接
        channel.close();
        connection.close();
    }
}

运行代码,发现代码报错了,队列没有创建成功:

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

这是为什么呢?让我们使用developer用户登录管理后台,看下developer用户与默认的guest用户的区别:

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

由此我们可以看出,是因为我们没有设置developer用户可以访问的virtual host导致的。

执行如下命令:

rabbitmqctl set_permissions -p / developer ".*" ".*" ".*"

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

此时再运行代码,发现队列新建成功,消息发布成功:

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

3.2查看(指定vhostpath)所有用户的权限

rabbitmqctl  list_permissions

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

查看virtual host为/的所有用户权限:

rabbitmqctl  list_permissions -p /

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

3.3查看指定用户的权限

查看developer用户的权限:

rabbitmqctl  list_user_permissions developer

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

3.4清除用户权限

清除developer用户的权限:

rabbitmqctl  clear_permissions developer

RabbitMQ使用教程(二)RabbitMQ用户管理,角色管理及权限设置

下一篇文章将讲解以下2个问题:

  1. 如何通过消息持久化来避免消息丢失?
  2. 如何通过手动ack机制来保证消息真正被消费?

敬请期待……

4.源码

源码地址:,欢迎下载。

5.参考链接

windows下 安装 rabbitmq 及操作常用命令