RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

申城異鄉人發表於2019-05-24

上一篇部落格 RabbitMQ使用教程(一)RabbitMQ環境安裝配置及Hello World示例 中,我們成功的安裝好了RabbitMQ環境,並通過一個Java客戶端示例瞭解了用生產者來發布訊息,用消費者來消費訊息。

本篇部落格主要講解下RabbitMQ如何管理使用者(新增/刪除/修改密碼),如何給使用者設定角色,如何設定使用者許可權,接下來,我們一一講解。

1.使用者管理

1.1檢視使用者列表

RabbitMQ安裝完成後,會有一個預設使用者(guest guest),那麼我們如何檢視使用者列表呢?

有2種方式,第1種是登入管理後臺http://localhost:15672/,在介面中檢視:

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

第2種方式是通過命令檢視:

cd E:\Program Files\RabbitMQ Server\rabbitmq_server-3.7.15\sbin

rabbitmqctl.bat list_users

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

注意:第1個命令中的路徑修改為你機器RabblitMQ的安裝路徑。

1.2新建使用者

在實際的使用過程中,不可能只存在這1個使用者,有時我們需要新建1個使用者給到開發人員使用,比如新建個使用者developer 123456。

仍然有2種方式,第1種方式是通過管理後臺新建:

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

第2種方式是通過命令新增:

 rabbitmqctl.bat add_user developer 123456

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

細心的網友也許會問為啥使用者guest的tags是[administrator],而新建的使用者developer的tags是[]呢,彆著急,這一點會下面的2.角色設定中講解。

1.3刪除使用者

在實際使用過程中,刪除使用者的場景肯定也是存在的,比如我想把剛剛新建的使用者developer刪除掉。

仍然有2種方式,第1種方式是通過管理後臺新建:

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

第2種方式是通過命令刪除:

rabbitmqctl.bat delete_user developer

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

因為後面還要使用使用者developer,刪除完可以再新增回來。

1.4修改密碼

可能有人會覺得123456這種密碼,太簡單了,不安全,我要修改成developer123456。

仍然有2種方式,第1種方式是通過管理後臺修改密碼:

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

第2種方式是通過命令修改密碼:

rabbitmqctl change_password developer developer123456

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

2.角色設定

RabbitMQ中主要有administrator,monitoring,policymaker,management,impersonator,none幾種角色。

預設的使用者guest是administrator角色,新建的developer使用者沒有設定角色,即為none,如果我們想把developer使用者設定為administrator角色,第1種方式是通過介面修改:

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

也可以通過以下命令來修改:

rabbitmqctl.bat set_user_tags developer administrator

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

也可以給使用者設定多個角色,如給使用者developer設定administrator,monitoring:

rabbitmqctl.bat set_user_tags developer administrator monitoring

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

注意:如果是設定多個角色,管理介面用,分隔,命令用空格分隔。

關於這幾種角色之間的區別,目前我還沒有看到很好的文章講解的很清楚,為了不誤導使用者,這裡就先不講解了,

暫且先設定為超級管理員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();
    }
}

執行程式碼,發現程式碼報錯了,佇列沒有建立成功:

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

這是為什麼呢?讓我們使用developer使用者登入管理後臺,看下developer使用者與預設的guest使用者的區別:

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

由此我們可以看出,是因為我們沒有設定developer使用者可以訪問的Virtual host導致的。

執行如下命令:

rabbitmqctl set_permissions -p / developer ".*" ".*" ".*"

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

此時再執行程式碼,發現佇列新建成功,訊息釋出成功:

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

3.2檢視(指定vhostpath)所有使用者的許可權

rabbitmqctl  list_permissions

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

檢視virtual host為/的所有使用者許可權:

rabbitmqctl  list_permissions -p /

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

3.3檢視指定使用者的許可權

檢視developer使用者的許可權:

rabbitmqctl  list_user_permissions developer

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

3.4清除使用者許可權

清除developer使用者的許可權:

rabbitmqctl  clear_permissions developer

RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定

下一篇文章將講解以下2個問題:

  1. 如何通過訊息持久化來避免訊息丟失?
  2. 如何通過手動Ack機制來保證訊息真正被消費?

敬請期待……

4.原始碼

原始碼地址:https://github.com/zwwhnly/springboot-action.git,歡迎下載。

5.參考連結

windows下 安裝 rabbitMQ 及操作常用命令

相關文章