此示例環(huán)境:物理機(jī)一臺,仨ubuntu虛擬機(jī)。
下載帶有web管理頁面的鏡像
每個(gè)節(jié)點(diǎn)執(zhí)行如下命令:
sudo docker pull rabbitmq:management
啟動容器
每個(gè)節(jié)點(diǎn)執(zhí)行如下命令:
sudo docker run -d --hostname rabbit1 --name myrabbit1 \
-p 35672:15672 \
-p 15692:15692 \
-p 15672:5672 \
-p 4369:4369 \
-p 25672:25672 \
-p 11883:1883 \
-e RABBITMQ_ERLANG_COOKIE='xxxxxxxxxxxxxxx' \
-v /home/ubuntu/rabbitmq:/var/lib/rabbitmq \
--restart always \
--add-host=rabbit1:192.168.100.103 --add-host=rabbit2:192.168.100.104 --add-host=rabbit3:192.168.100.105 \
rabbitmq:management
命令參數(shù)說明
--hostname --name:依次rabbit2、3即可
RABBITMQ_ERLANG_COOKIE:.erlang.cookie文件的內(nèi)容,是erlang實(shí)現(xiàn)分布式的必要文件,erlang分布式的每一個(gè)節(jié)點(diǎn)上要保持相同的.erlang.cookie文件,內(nèi)容隨便寫。保證每個(gè)節(jié)點(diǎn)一致即可
下面兩個(gè)參數(shù)設(shè)置默認(rèn)賬號密碼(可不用,沒設(shè)置就默認(rèn):guest, guest)
-e RABBITMQ_DEFAULT_USER=admin 設(shè)置rabbitmq默認(rèn)用戶為admin
-e RABBITMQ_DEFAULT_PASS=admin 設(shè)置rabbitmq默認(rèn)密碼為admin
端口號解釋
4369 (epmd), 25672 (Erlang distribution)
Epmd 是 Erlang Port Mapper Daemon 的縮寫,在 Erlang 集群中相當(dāng)于 dns 的作用,綁定在4369端口上。
5672, 5671 (AMQP 0-9-1 without and with TLS)
AMQP 是 Advanced Message Queuing Protocol 的縮寫,一個(gè)提供統(tǒng)一消息服務(wù)的應(yīng)用層標(biāo)準(zhǔn)高級消息隊(duì)列協(xié)議,是應(yīng)用層協(xié)議的一個(gè)開放標(biāo)準(zhǔn),專為面向消息的中間件設(shè)計(jì)?;诖藚f(xié)議的客戶端與消息中間件之間可以傳遞消息,并不受客戶端/中間件不同產(chǎn)品、不同的開發(fā)語言等條件的限制。Erlang 中的實(shí)現(xiàn)有 RabbitMQ 等。
15672 (if management plugin is enabled)
通過 http://serverip:15672 訪問 RabbitMQ 的 Web 管理界面,默認(rèn)用戶名密碼都是 guest。(注意:RabbitMQ 3.0之前的版本默認(rèn)端口是55672,下同)
61613, 61614 (if STOMP is enabled)
Stomp 是一個(gè)簡單的消息文本協(xié)議,它的設(shè)計(jì)核心理念就是簡單與可用性,官方文檔,實(shí)踐一下 Stomp 協(xié)議需要:
一個(gè)支持 stomp 消息協(xié)議的 messaging server (譬如activemq,rabbitmq);
一個(gè)終端(譬如linux shell);
一些基本命令與操作(譬如nc,telnet)
1883, 8883 (if MQTT is enabled)
MQTT 只是 IBM 推出的一個(gè)消息協(xié)議,基于 TCP/IP 的。兩個(gè) App 端發(fā)送和接收消息需要中間人,這個(gè)中間人就是消息服務(wù)器(比如ActiveMQ/RabbitMQ),三者通信協(xié)議就是 MQTT
集群普通隊(duì)列
進(jìn)入除了第一個(gè)節(jié)點(diǎn)外的服務(wù)器內(nèi)執(zhí)行以下命令
- 進(jìn)入容器
docker exec -it [容器ID] /bin/bash - 停止MQ服務(wù)
rabbitmqctl stop_app - 加入rabbit1集群
rabbitmqctl join_cluster rabbit@rabbit1 - 啟動MQ服務(wù)
rabbitmqctl start_app
完后訪問http://IP:35672/#/可見如下有三個(gè)node,如果不做以上操作,就只有ip的那一個(gè)節(jié)點(diǎn)。
rabbitmq管理頁面
集群鏡像隊(duì)列
先部署集群普通隊(duì)列,基于普通集群配置鏡像隊(duì)列
創(chuàng)建policy

參數(shù)解釋
-
Name:為策略名稱,可以是任何名稱,但建議使用不帶空格的基于 ASCII 的名稱。 -
Pattern:與一個(gè)或多個(gè) queue(exchange) 名稱匹配的正則表達(dá)式,可以使用任何正則表達(dá)式。只有一個(gè) ^ 代表匹配所有,^test 為匹配名稱為 "test" 的 exchanges 或者 queue。 -
Apply to:Pattern 應(yīng)用對象。 -
Priority:配置多個(gè)策略時(shí)的優(yōu)先級,值越大,優(yōu)先級越高。沒有指定優(yōu)先級的消息會以 0 優(yōu)先級對待,對于超過隊(duì)列所定最大優(yōu)先級的消息,優(yōu)先級以最大優(yōu)先級對待。 -
Definition:鍵/值對,將被插入匹配 queues and exchanges 的可選參數(shù)映射中。 -
ha-mode:策略鍵,分為 3 種模式:
1.all:所有的 queue。
2.exctly:部分(需配置 ha-params 參數(shù),此參數(shù)為 int 類型。比如 3,眾多集群中的隨機(jī) 3 臺機(jī)器)。
3.nodes:指定(需配置 ha-params 參數(shù),此參數(shù)為數(shù)組類型。比如 ["rabbit@rabbit2", "rabbit@rabbit3"] 這樣指定為 rabbit2 與 rabbit3 這兩臺機(jī)器)。 -
ha-sync-mode:隊(duì)列同步:
1.manual:手動(默認(rèn)模式)。新的隊(duì)列鏡像將不會收到現(xiàn)有的消息,它只會接收新的消息。
2.automatic:自動同步。當(dāng)一個(gè)新鏡像加入時(shí),隊(duì)列會自動同步。隊(duì)列同步是一個(gè)阻塞操作。
仲裁(quorum)隊(duì)列
Quorum模式只作用于隊(duì)列,需要在新建隊(duì)列時(shí)配置類型
先部署普通集群,基于普通集群配置仲裁隊(duì)列

