官網(wǎng)參考:https://www.rabbitmq.com/shovel.html
概述
Shovel 可以實(shí)現(xiàn)在兩個(gè) rabbitmq之間進(jìn)行消息的遠(yuǎn)程復(fù)制。
利用該組件塔拳,可以實(shí)現(xiàn)如下業(yè)務(wù)場(chǎng)景:
- 內(nèi)外網(wǎng)之間的消息傳輸
- 多個(gè)消息節(jié)點(diǎn)之間的消息傳輸
- 消息遠(yuǎn)程異地傳輸劲赠。
啟用Shovel插件
-
啟用Shovel插件
cmd 下運(yùn)行
rem 啟用Shovel插件
rabbitmq-plugins enable rabbitmq_shovel
-
啟用Shovel管理插件
rem 啟用Shovel管理插件
rabbitmq-plugins enable rabbitmq_shovel_management
-
在Docker下涛目,啟用 Shovel插件
在Docker下啟動(dòng)rabbitmq容器,并通過(guò)--name 指定容器名字為rabbitmq1
docker run -d --name rabbitmq1 -p 5672:5672 -p 8088:15672 rabbitmq:3.7.17-management
進(jìn)入容器
docker exec -it rabbitmq1 bash
成功進(jìn)入容器的界面如下圖所示:
在容器中凛澎,輸入啟用插件的命令即可霹肝,如下圖所示:
如果成功啟用,登錄WEB管理控制臺(tái)塑煎,將看到如下內(nèi)容:
Shovel配置概述
定義shovels有兩種方式
- 靜態(tài)方式(通過(guò)配置文件定義)沫换,配置完成后需要重啟。
- 動(dòng)態(tài)方式(通過(guò)broker的運(yùn)行時(shí)參數(shù))最铁,可以隨時(shí)配置讯赏,不需要重啟:可以使用rabbitmqctl 的 REST API設(shè)置參數(shù),或通過(guò)WEB管理UI進(jìn)行配置(要求啟用Shovel管理插件)
Shovel實(shí)戰(zhàn)
-
創(chuàng)建Docker橋接 網(wǎng)絡(luò)
要實(shí)現(xiàn)多個(gè)rabbitmq節(jié)點(diǎn)遠(yuǎn)程連接冷尉,要求多個(gè)節(jié)點(diǎn)的網(wǎng)絡(luò)能連通漱挎。
Docker支持多種網(wǎng)絡(luò)方式,這里使用橋接網(wǎng)絡(luò)方式雀哨。
在橋接方式下磕谅,兩個(gè)容器節(jié)點(diǎn)可以互通。
#創(chuàng)建名為net4rabbitmq的橋接網(wǎng)絡(luò)
docker network create net4rabbitmq
-
使用DOCKER運(yùn)行兩個(gè)rabbitmq實(shí)例
運(yùn)行兩個(gè)rabbitmq實(shí)例雾棺,并添加到之前創(chuàng)建的net4rabbitmq橋接網(wǎng)絡(luò)
docker run -d --name rabbitmq1 -p 5672:5672 -p 8088:15672 --network net4rabbitmq --network-alias rmq1 rabbitmq:3.7.17-management
docker run -d --name rabbitmq2 -p 5673:5672 -p 8089:15672 --network net4rabbitmq --network-alias rmq2 rabbitmq:3.7.17-management
--name參數(shù)指定了容器名稱(chēng)
-network 參數(shù)指定了橋接網(wǎng)絡(luò)
--network-alias 指定了網(wǎng)絡(luò)別名(容器之間可以通過(guò)網(wǎng)絡(luò)別名訪(fǎng)問(wèn))
-
啟用Shovel插件
分別針對(duì)兩個(gè)docker實(shí)例膊夹,啟用Shovel插件
docker exec rabbitmq1 bash -c "rabbitmq-plugins enable rabbitmq_shovel"
docker exec rabbitmq1 bash -c "rabbitmq-plugins enable rabbitmq_shovel_management"
docker exec rabbitmq2 bash -c "rabbitmq-plugins enable rabbitmq_shovel"
docker exec rabbitmq2 bash -c "rabbitmq-plugins enable rabbitmq_shovel_management"
- 第二次啟動(dòng)容器實(shí)例如下:
使用這種方式啟動(dòng)時(shí),如果之前已啟用Shovel插件垢村,則不需要再次啟用
docker start rabbitmq1
docker start rabbitmq2
-
配置 Shovel (動(dòng)態(tài)方式)
Shovel可以配置在源節(jié)點(diǎn)割疾,也可以配置在目標(biāo)節(jié)點(diǎn)。
下面的示例將在目標(biāo)節(jié)點(diǎn)上進(jìn)行配置:在rabbitmq2上配置一個(gè)shovel嘉栓,實(shí)現(xiàn)將rabbitmq1
上的隊(duì)列 Q宏榕,復(fù)制到rabbitmq2的Q隊(duì)列
進(jìn)入rabbitmq2的WEB管理控制臺(tái),進(jìn)入Shovel Management侵佃,添加一個(gè) shovel麻昼,界面如下圖所示:
添加后的界面:
可以通過(guò)Shovel Status查看shovel狀態(tài),如下圖:
-
測(cè)試結(jié)果
- 測(cè)試1
向rabbitmq1節(jié)點(diǎn)的Q隊(duì)列馋辈,放入一個(gè)消息抚芦。
會(huì)看到,該消息自動(dòng)轉(zhuǎn)發(fā)到了rabbitmq2節(jié)點(diǎn)的Q隊(duì)列。 - 測(cè)試2
先將rabbitmq2節(jié)點(diǎn)停止
向rabbitmq1節(jié)點(diǎn)的Q隊(duì)列叉抡,放入一個(gè)消息尔崔。(這時(shí)該消息一直停留在該隊(duì)列中)
重啟rabbitmq2節(jié)點(diǎn),這時(shí)rabbitmq1節(jié)點(diǎn)的消息自動(dòng) 轉(zhuǎn)發(fā)到了rabbitmq2節(jié)點(diǎn)上褥民。
問(wèn)題診斷
-
查看日志
#查看容器rabbitmq1的日志
docker logs -f rabbitmq1
-
網(wǎng)絡(luò)連通測(cè)試ping
安裝ping命令的方法季春,安裝后即可使用ping
docker exec -it rabbitmq1 /bin/bash
apt-get update
apt-get install iputils-ping
ping rmq2
ping rabbitmq2
ping 容器IP