RabbitMQ基礎入門

諾大的院子發表於2020-08-23

安裝Erlang

RabbitMQ是使用Erlang所編寫的,所以RabbitMQ的執行依賴Erlang。為了簡單起見,這裡只安裝RabbitMQ官方提供的“零依賴”版Erlang
新建/etc/yum.repos.d/rabbitmq_erlang.repo檔案並鍵入以下內容:

  • CentOS 8

    [rabbitmq_erlang]
    name=rabbitmq_erlang
    baseurl=https://packagecloud.io/rabbitmq/erlang/el/8/$basearch
    repo_gpgcheck=1
    gpgcheck=1
    enabled=1
    # PackageCloud's repository key and RabbitMQ package signing key
    gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
         https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    [rabbitmq_erlang-source]
    name=rabbitmq_erlang-source
    baseurl=https://packagecloud.io/rabbitmq/erlang/el/8/SRPMS
    repo_gpgcheck=1
    gpgcheck=0
    enabled=1
    # PackageCloud's repository key and RabbitMQ package signing key
    gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
         https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
  • CentOS 7

    [rabbitmq_erlang]
    name=rabbitmq_erlang
    baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/$basearch
    repo_gpgcheck=1
    gpgcheck=1
    enabled=1
    # PackageCloud's repository key and RabbitMQ package signing key
    gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
         https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300
    [rabbitmq_erlang-source]
    name=rabbitmq_erlang-source
    baseurl=https://packagecloud.io/rabbitmq/erlang/el/7/SRPMS
    repo_gpgcheck=1
    gpgcheck=0
    enabled=1
    # PackageCloud's repository key and RabbitMQ package signing key
    gpgkey=https://packagecloud.io/rabbitmq/erlang/gpgkey
         https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc
    sslverify=1
    sslcacert=/etc/pki/tls/certs/ca-bundle.crt
    metadata_expire=300

執行以下命令即可安裝:

yum install erlang

下載安裝包

RabbitMQ官方提供編譯好的二進位制安裝包,下載解壓後即可使用,非常方便,下載地址:
www.rabbitmq.com/install-generic-u...
選擇對應作業系統的版本即可。
.xz壓縮檔案解壓方法:

tar -xvJf rabbitmq-server-generic-unix-3.8.7.tar.xz

啟用管理外掛

RabbitMQ的管理外掛提供了一套基於HTTP的API,用於管理和監控RabbitMQ的節點和叢集,它同時提供了網頁介面和命令列工具rabbitmqadmin
要啟用管理外掛,只需要執行以下命令:

./sbin/rabbitmq-plugins enable rabbitmq_management

管理網頁的預設訪問埠是15672,你可以使用下面的網址來訪問:http://{node-hostname}:15672/

RabbitMQ的命令檔案位於安裝目錄下的sbin目錄中

  • 啟動
    ./sbin/rabbitmq-server  // 開啟
    ./sbin/rabbitmq-server -detached // 守護執行緒開啟
    ./sbin/rabbitmqctl reset // 重啟節點
  • 關閉
    ./sbin/rabbitmqctl stop // 停止
    ./sbin//rabbitmqctl stop_app // 停止應用
    ./sbin/rabbitmqctl -n rabbit@server.example.com stop  // 停止特定節點
  • 查詢
    ./sbin/rabbitmqctl status // 檢視服務狀態
    ./sbin/rabbitmqctl list_bindings // 檢視繫結
    ./sbin/rabbitmqctl list_exchanges // 檢視交換器
    ./sbin/rabbitmqctl list_queues // 檢視佇列

使用者管理

./sbin/rabbitmqctl list_users // 檢視使用者
./sbin/rabbitmqctl add_user developer 123456  // 新增使用者
./sbin/rabbitmqctl/delete_user developer // 刪除使用者
./sbin/rabbitmqctl change_password developer developer123456

角色管理

RabbitMQ中主要有administratormonitoringpolicymakermanagementimpersonator,none幾種角色。每種角色的許可權如下:

  • none:
    不能進入Web Management,只能傳送和接收訊息,所以一般生產者和消費者預設角色就是這個。
  • management:
    使用者可以通過AMQP做的任何事外加:
    列出自己可以通過AMQP登入的virtual hosts,檢視自己的virtual hosts中的queues、exchanges和bindings,檢視和關閉自己的channels和connections。檢視有關自己的virtual hosts的“全域性”的統計資訊,包含其他使用者在這些virtual hosts中的活動。
  • policymaker:
    management可以做的任何事外加:
    檢視、建立和刪除自己的virtual hosts所屬的policies和parameters。
  • monitoring:
    management可以做的任何事外加:列出所有virtual hosts,包括他們不能登入的virtual hosts;檢視其他使用者的connections和channels;檢視節點級別的資料如clustering和memory使用情況;檢視真正的關於所有virtual hosts的全域性的統計資訊。
  • administrator:
    超級管理員,擁有最高的許可權,可以做任何事

給使用者分配角色:

./sbin/rabbitmqctl set_user_tags developer administrator monitoring

VirtualHost管理

RabbitMQ中的VirtualHost是一臺邏輯上獨立的伺服器,它提供了一種隔離機制,在多租戶使用的時候特別有用。每一個VHost都有自己的交換機、佇列、繫結和許可權控制,允許不同的Vhost之間擁有同名的佇列、交換機。拿MySQL來類比,VHost就相當於MySQL中的資料庫,佇列、交換機就相當於庫的表,每個庫都可以有自己的許可權配置。
VHost控制命令

./sbin/rabbitmqctl list_vhosts  // 列舉所有Vhost
./sbin/rabbitmqctl add_vhost test // 新增Vhost
./sbin/rabbitmqctl delete_vhost test // 刪除Vhost

使用者許可權

給使用者分配許可權主要包括兩方面:

  1. 繫結到指定的Vhost上,只有繫結到Vhost上,使用者才能訪問該Vhost上的資源。
  2. 設定對佇列、交換機的許可權,這些許可權包括配置許可權和讀寫許可權。配置許可權會影響到交換機、佇列的宣告和刪除。讀寫許可權影響到從佇列裡取訊息,向交換機傳送訊息以及佇列和交換機的繫結(binding)操作。
    例如: 將佇列繫結到某交換機上,需要具有佇列的可寫許可權,以及交換機的可讀許可權;向交換機傳送訊息需要具有交換機的可寫許可權;從佇列裡取資料需要具有佇列的可讀許可權。

設定使用者許可權的命令格式

./sbin/rabbitmqctl set_permissions -p VHostPath User ConfP WriteP ReadP

一個例子

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

其它常用命令

./sbin/rabbitmqctl list_permissions [-p VHostPath] // 檢視(指定hostpath)所有使用者的許可權資訊
./sbin/rabbitmqctl list_user_permissions User // 檢視指定使用者的許可權資訊
./sbinrabbitmqctl clear_permissions [-p VHostPath] User // 清除使用者的許可權資訊
  1. RabbitMQ使用教程(二)RabbitMQ使用者管理,角色管理及許可權設定
  2. RabbitMQ入門教程(十三):虛擬主機vhost與許可權管理
  3. Rabbitmq使用者許可權配置
本作品採用《CC 協議》,轉載必須註明作者和本文連結