中间件系列之RabbitMQ-3-用户管理

200 阅读2分钟

在上一篇文章中,我们已经对RabbitMQ有了一个初步的认知,在讲解其他内容之前,我们有必要先来了解下RabbitMQ是如何管理用户的。

1.添加用户

如下所示,可以直接通过控制台添加用户

同时,也可以给用户设置角色,角色说明如下:

  • Admin

    可登陆管理控制台,可查看所有信息,并且可以对用户、策略进行设置

  • Monitoring

    可登陆管理控制台,同时可以查看节点的相关信息(进程数,内存使用情况等)

  • Policymaker

    可登陆管理控制台,可以对策略进行设置,但无法查看节点的相关信息

  • Management

    仅可以登录管理控制台

  • 其他

    无法登录管理控制台,通常就是普通的生产者和消费者

点击对应的用户名,就能做修改或删除

当然,如上操作也可以使用命令来进行,在rabbitMQ安装目录../sbin目录下:

  • 查看用户

    rabbitmqctl.bat list_users
    
  • 新建用户

    rabbitmqctl.bat add_user username passwpord
    
  • 删除用户

    rabbitmqctl.bat delete_user username
    
  • 修改用户密码

    rabbitmqctl change_password passwpord new-passwpord
    
  • 角色设置

    rabbitmqctl.bat set_user_tags username administrator
    

2.权限配置

当我们新建好用户后,就可以直接使用了吗?如下修改代码,添加我们维护的账号信息

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("wyf");
        factory.setPassword("123456");
        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();
    }
}

运行代码会发现代码报错

提示拒绝用户连接。至于原因,我们返回控制台看一下就明白了

可以看到,是由于我们没有设置用户可以访问Virtual host导致的。点击用户名称设置即可

也可以通过命令来执行

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