上一篇部落格 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
下一篇文章將講解以下2個問題:
- 如何通過訊息持久化來避免訊息丟失?
- 如何通過手動Ack機制來保證訊息真正被消費?
敬請期待……
4.原始碼
原始碼地址:https://github.com/zwwhnly/springboot-action.git,歡迎下載。