上一篇博客 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實戰指南》