Docker 部署 RabbitMQ

簡介

AMQP,即Advanced Message Queuing Protocol,高級消息隊列協議,是應用層協議的一個開放標準,爲面向消息的中間件設計。消息中間件主要用於組件之間的解耦,消息的發送者無需知道消息使用者的存在,反之亦然。
AMQP的主要特徵是面向消息、隊列、路由(包括點對點和發佈/訂閱)、可靠性、安全。

RabbitMQ是一個開源的AMQP實現,服務器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用於在分佈式系統中存儲轉發消息,在易用性、擴展性、高可用性等方面表現不俗。

RabbitMQ提供了可靠的消息機制、跟蹤機制和靈活的消息路由,支持消息集羣和分佈式部署。適用於排隊算法、秒殺活動、消息分發、異步處理、數據同步、處理耗時任務、CQRS等應用場景。

RabbitMQ工作機制

首先要知道RabbitMQ的三種角色:生產者、消費者、消息服務器

  • 生產者:消息的創建者,負責創建和推送消息到消息服務器
  • 消費者:消息的接收方,接受消息並處理消息
  • 消息服務器:其實RabbitMQ本身,不會產生和消費消息,相當於一箇中轉站,將生產者的消息路由給消費者

RabbitMQ角色

  • Server:又稱broker,接受客戶端的鏈接,實現AMQP實體服務
  • Connection:連接,應用程序與broker的網絡連接
  • ConnectionFactory:連接管理,應用程序或消費方與RabbitMQ建立連接的管理器
  • Channel:網絡信道,幾乎所有的操作都在channel中進行,Channel是進行消息讀寫的通道。客戶端可以建立多個channel,每個channel代表一個會話任務。
  • Exchange:交換機,用於接收分配消息到隊列中
  • Queue:保存消息
  • Routingkey:一個路由規則,消息會攜帶routingKey,決定消息最終的隊列;虛擬機可用它來確定如何路由一個特定消息。(如負載均衡)
  • BindingKey:Queue通過bindingKey與交換機綁定;Exchange和Queue之間的虛擬鏈接,binding中可以包換routing key
  • Message:消息,服務器與應用程序之間傳送的數據,由Properties和Body組成.Properties可以對消息進行修飾,必須消息的優先級、延遲等高級特性;Body則是消息體內容。
  • virtualhost: 虛擬地址,用於進行邏輯隔離,最上層的消息路由。一個virtual host裏面可以有若干個Exchange和Queue,同一個Virtual Host 裏面不能有相同名稱的Exchange 或 Queue。

RabbitMQ整體架構

部署RabbitMQ

docker鏡像地址

  • rabbitmq:management: 帶web管理界面

  • rabbitmq:不帶web管理界面

這裏拉取rabbitmq:management鏡像

docker pull rabbitmq:management

Run

docker run -d --hostname=rabbitmqhost --name rabbitmq -p 5672:5672 -p 15672:15672 -v /dockerdata/rabbitmq/data:/var/lib/rabbitmq  -e RABBITMQ_DEFAULT_VHOST=v_rabbitmqhost  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin  rabbitmq:management

映射5672客戶端通信端口,和15672web管理端口。

參數 含義
hostname 指定rabbitmq的Host名稱,保持持久化
-p 5672 客戶端通信端口
-p 15672 webUI管理端口
-v /var/lib/rabbitmq 持久化,和hostname最好一起使用
RABBITMQ_DEFAULT_VHOST 容器Host名稱
RABBITMQ_DEFAULT_USER/RABBITMQ_DEFAULT_PASS 設置賬號密碼,不配置的話 默認guest/guest

簡化版

docker run -d --hostname=rabbitmqhost --name rabbitmq -p 5672:5672 -p 15672:15672 -v /dockerdata/rabbitmq/data:/var/lib/rabbitmq rabbitmq:management

進入RabbitMQ

docker exec -it rabbitmq bash
命令 含義
rabbitmq-plugins enable rabbitmq_management 啓用Web控制檯,此鏡像默認啓用;如果使用rabbitmq鏡像此命令開啓
rabbitmqctl status 查看RabbitMQ狀態
rabbitmqctl add_user username password 添加用戶
rabbitmqctl set_user_tags username administrator 賦予用戶管理員權限
rabbitmqctl list_users 查看用戶列表
rabbitmqctl delete_user username 刪除用戶
rabbitmqctl oldPassword Username newPassword 修改用戶密碼

訪問rabbitmq:15672,使用 guest/guest登錄

Web 管理界面

overview概覽

Admin用戶管理

添加用戶

上面的Tags選項,其實是指定用戶的角色,可選的有以下幾個:

角色 權限
超級管理員(administrator) 可登陸管理控制檯,可查看所有的信息,並且可以對用戶,策略(policy)進行操作。
監控者(monitoring) 可登陸管理控制檯,同時可以查看rabbitmq節點的相關信息(進程數,內存使用情況,磁盤使用情況等)
策略制定者(policymaker) 可登陸管理控制檯, 同時可以對policy進行管理。但無法查看節點的相關信息(上圖紅框標識的部分)
普通管理者(management) 僅可登陸管理控制檯,無法看到節點信息,也無法對策略進行管理。
其他 無法登陸管理控制檯,通常就是普通的生產者和消費者

虛擬主機

創建虛擬主機。爲了讓各個用戶可以互不干擾的工作,RabbitMQ添加了虛擬主機(Virtual Hosts)的概念。其實就是一個獨立的訪問路徑,不同用戶使用不同路徑,各自有自己的隊列、交換機,互相不會影響。

消息模型

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章