上一篇博客 RabbitMQ使用教程(一)RabbitMQ环境安装配置及Hello World示例 中,咱们成功的安装好了RabbitMQ环境,并经过一个Java客户端示例了解了用生产者来发布消息,用消费者来消费消息。html
本篇博客主要讲解下RabbitMQ如何管理用户(新增/删除/修改密码),如何给用户设置角色,如何设置用户权限,接下来,咱们一一讲解。java
RabbitMQ安装完成后,会有一个默认用户(guest guest),那么咱们如何查看用户列表呢?git
有2种方式,第1种是登陆管理后台http://localhost:15672/,在界面中查看:github
第2种方式是经过命令查看:spring
cd E:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.15\sbin
rabbitmqctl.bat list_users
复制代码
注意:第1个命令中的路径修改成你机器RabblitMQ的安装路径。shell
在实际的使用过程当中,不可能只存在这1个用户,有时咱们须要新建1个用户给到开发人员使用,好比新建个用户developer 123456。windows
仍然有2种方式,第1种方式是经过管理后台新建:安全
第2种方式是经过命令新增:springboot
rabbitmqctl.bat add_user developer 123456
复制代码
细心的网友也许会问为啥用户guest的tags是[administrator],而新建的用户developer的tags是[]呢,别着急,这一点会在下面的2.角色设置中讲解。post
在实际使用过程当中,删除用户的场景确定也是存在的,好比我想把刚刚新建的用户developer删除掉。
仍然有2种方式,第1种方式是经过管理后台新建:
第2种方式是经过命令删除:
rabbitmqctl.bat delete_user developer
复制代码
由于后面还要使用用户developer,删除完能够再新增回来。
可能有人会以为123456这种密码,太简单了,不安全,我要修改为developer123456。
仍然有2种方式,第1种方式是经过管理后台修改密码:
第2种方式是经过命令修改密码:
rabbitmqctl change_password developer developer123456
复制代码
RabbitMQ中主要有administrator,monitoring,policymaker,management,impersonator,none几种角色。
默认的用户guest是administrator角色,新建的developer用户没有设置角色,即为none,若是咱们想把developer用户设置为administrator角色,第1种方式是经过界面修改:
也能够经过如下命令来修改:
rabbitmqctl.bat set_user_tags developer administrator
复制代码
也能够给用户设置多个角色,如给用户developer设置administrator,monitoring:
rabbitmqctl.bat set_user_tags developer administrator monitoring
复制代码
注意:若是是设置多个角色,管理界面用,分隔,命令用空格分隔。
关于这几种角色之间的区别,目前我尚未看到很好的文章讲解的很清楚,为了避免误导用户,这里就先不讲解了,
暂且先设置为超级管理员administrator便可。
让咱们适当修改下上篇博客中的生产者类,使用新建的用户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();
}
}
复制代码
运行代码,发现代码报错了,队列没有建立成功:
这是为何呢?让咱们使用developer用户登陆管理后台,看下developer用户与默认的guest用户的区别:
由此咱们能够看出,是由于咱们没有设置developer用户能够访问的Virtual host致使的。
执行以下命令:
rabbitmqctl set_permissions -p / developer ".*" ".*" ".*"
复制代码
此时再运行代码,发现队列新建成功,消息发布成功:
rabbitmqctl list_permissions
复制代码
查看virtual host为/的全部用户权限:
rabbitmqctl list_permissions -p /
复制代码
查看developer用户的权限:
rabbitmqctl list_user_permissions developer
复制代码
清除developer用户的权限:
rabbitmqctl clear_permissions developer
复制代码
源码地址:github.com/zwwhnly/spr…,欢迎下载。
windows下 安装 rabbitMQ 及操做经常使用命令
朱忠华《RabbitMQ实战指南》