下载安装包,参考: https://www.cnblogs.com/yakniu/p/16183938.html
查看已有用户和用户角色
-- mq的sbin目录下执行如下命令
命令:rabbitmqctl.bat list_users
新增一个用户:
命令:rabbitmqctl.bat add_user username password
例如 :rabbitmqctl.bat add_user admin ENC(nnvjnZmJwu1AoctA9aV5kg==)
admin 后面没有“[administrator]”这就涉及到用户角色问题了:
角色设置
按照我个人理解,rabbitmq用户角色可分为五类:超级管理员, 监控者, 策略制定者, 普通管理者以及其他。
(1) 超级管理员(administrator)
可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作。
(2) 监控者(monitoring)
可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmq节点的相关信息(进程数,内存使用情况,磁盘使用情况等)
(3) 策略制定者(policymaker)
可登陆管理控制台(启用management plugin的情况下), 同时可以对policy进行管理。
(4) 普通管理者(management)
仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理。
(5) 其他的
无法登陆管理控制台,通常就是普通的生产者和消费者。
设置admin 变成超级管理员角色:
命令:rabbitmqctl.bat set_user_tags username administrator
例如:rabbitmqctl.bat set_user_tags admin administrator
效果展示:
密码修改
命令:rabbitmqctl change_password userName newPassword
例如:修改admin密码为admin
rabbitmqctl change_password admin admin
用户删除
rabbitmqctl.bat delete_user username
权限设置
参考: https://www.cnblogs.com/wyt007/p/9086233.html
首先创建VirtualHost,可以通过以下命令来创建。
rabbitmqctl add_vhost[vhostname]
客户端登录:http://localhost:15672/
#设置用户权限
rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP
例如:rabbitmqctl set_permissions admin ".*" ".*" ".*"
#查看(指定hostpath)所有用户的权限信息
rabbitmqctl list_permissions [-p VHostPath]
# 查看指定用户的权限信息
rabbitmqctl list_user_permissions User
# 清除用户的权限信息
rabbitmqctl clear_permissions [-p VHostPath] User
代码测试:
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("admin");
factory.setPassword("admin");
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();
}