上一篇博客 RabbitMQ使用教程(一)RabbitMQ環境安裝配置及Hello World示例 中,我們成功的安裝好了RabbitMQ環境,並通過一個Java客戶端示例了解了用生產者來發布消息,用消費者來消費消息。
本篇博客主要講解下RabbitMQ如何管理用戶(新增/刪除/修改密碼),如何給用戶設置角色,如何設置用戶權限,接下來,我們一一講解。
1. 用戶管理
1.1 查看用戶列表
RabbitMQ安裝完成后,會有一個默認用戶(guest guest),那么我們如何查看用戶列表呢?
有2種方式,第1種是登錄管理后台http://localhost:15672/,在界面中查看:
第2種方式是通過命令查看:
cd E:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.15\sbin
rabbitmqctl.bat list_users
注意:第1個命令中的路徑修改為你機器RabblitMQ的安裝路徑。
1.2 新建用戶
在實際的使用過程中,不可能只存在這1個用戶,有時我們需要新建1個用戶給到開發人員使用,比如新建個用戶developer 123456。
仍然有2種方式,第1種方式是通過管理后台新建:
第2種方式是通過命令新增:
rabbitmqctl.bat add_user developer 123456
細心的網友也許會問為啥用戶guest的tags是[administrator],而新建的用戶developer的tags是[]呢,別着急,這一點會在下面的2.角色設置中講解。
1.3 刪除用戶
在實際使用過程中,刪除用戶的場景肯定也是存在的,比如我想把剛剛新建的用戶developer刪除掉。
仍然有2種方式,第1種方式是通過管理后台新建:
第2種方式是通過命令刪除:
rabbitmqctl.bat delete_user developer
因為后面還要使用用戶developer,刪除完可以再新增回來。
1.4 修改密碼
可能有人會覺得123456這種密碼,太簡單了,不安全,我要修改成developer123456。
仍然有2種方式,第1種方式是通過管理后台修改密碼:
第2種方式是通過命令修改密碼:
rabbitmqctl change_password developer developer123456
2. 角色設置
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即可。
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();
}
}
運行代碼,發現代碼報錯了,隊列沒有創建成功:
這是為什么呢?讓我們使用developer用戶登錄管理后台,看下developer用戶與默認的guest用戶的區別:
由此我們可以看出,是因為我們沒有設置developer用戶可以訪問的Virtual host導致的。
執行如下命令:
rabbitmqctl set_permissions -p / developer ".*" ".*" ".*"
此時再運行代碼,發現隊列新建成功,消息發布成功:
3.2 查看(指定vhostpath)所有用戶的權限
rabbitmqctl list_permissions
查看virtual host為/的所有用戶權限:
rabbitmqctl list_permissions -p /
3.3 查看指定用戶的權限
查看developer用戶的權限:
rabbitmqctl list_user_permissions developer
3.4 清除用戶權限
清除developer用戶的權限:
rabbitmqctl clear_permissions developer
4. 源碼及參考
源碼地址:https://github.com/zwwhnly/springboot-action.git,歡迎下載。
朱忠華《RabbitMQ實戰指南》