前言
RabbitMQ 是一個(gè)功能強(qiáng)大的開(kāi)源消息隊(duì)列系統(tǒng),它實(shí)現(xiàn)了高效的消息通信和異步處理。
本文主要介紹其基于 Docker-Compose 的部署安裝和一些使用的經(jīng)驗(yàn)。
特點(diǎn)
- 成熟,穩(wěn)定
- 消息持久化
- 靈活的消息路由
- 高性能,高可用性,可擴(kuò)展性高
- 支持插件系統(tǒng):RabbitMQ 具有豐富的插件系統(tǒng),可以通過(guò)安裝插件來(lái)擴(kuò)展其功能,例如管理界面、消息追蹤、消息轉(zhuǎn)換等。
- 官方提供了 .NET/Java 的 SDK
使用情況
- 項(xiàng)目中用于日志記錄,消息發(fā)送,數(shù)據(jù)同步等,穩(wěn)定可靠
- 業(yè)務(wù)模塊的初始化,數(shù)據(jù)導(dǎo)入異步處理
- 做好冪等處理,不同場(chǎng)景使用不同的確認(rèn)方式,防止消息的重復(fù)消費(fèi)
- RabbitMQ 默認(rèn)不支持延遲消息,使用延遲消息插件實(shí)現(xiàn)即可(有局限,僅支持最多一兩天的延遲消息)
- 使用 .NET SDK:RabbitMQ.Client,后面再分享二次封裝使用
實(shí)踐
使用 Docker Compose V2 安裝 rabbitmq v3.12.6
準(zhǔn)備
- 當(dāng)前版本:v3.12.6
- 使用鏡像:rabbitmq:3.12.6-management (帶 web 管理界面)
- 默認(rèn)端口:5672:應(yīng)用連接端口 15672:web 控制臺(tái)
使用 Docker Compose 安裝
本篇文章基于 Docker V24 及 Docker Compose V2,安裝可以參考之前的文章
配置說(shuō)明
- 固定了鏡像版本:
rabbitmq:3.12.6-management
- 指定的主機(jī)名:
rabbitserver
- 指定虛擬機(jī)名稱:
admin_vhost
- 指定賬號(hào)密碼:
root
devops666
- 指定端口:
5672
:應(yīng)用連接端口15672
:web 管理界面 - 掛載數(shù)據(jù)目錄:
./data:/var/lib/rabbitmq
- 掛載額外的插件目錄:
./myplugins:/myplugins
RabbitMQ 容器中默認(rèn)插件目錄是 /plugins 不推薦掛載 - 將 ./myplugins 掛載到容器的,并將其加入插件查找的目錄中:
RABBITMQ_PLUGINS_DIR: '/plugins:/myplugins'
- 指定網(wǎng)絡(luò):devopsnetwork (
docker network create devopsnetwork
)
配置文件 compose.yml
-
準(zhǔn)備好 compose.yml 拷貝到服務(wù)器
-
然后運(yùn)行
docker compose up -d
即可version: '3.1' services: rabbitmq: image: rabbitmq:3.12.6-management container_name: rabbitmq_3_12 restart: always # 節(jié)點(diǎn)名 rabbit@rabbitserver,不然會(huì)去容器ID hostname: rabbitserver environment: # 默認(rèn)虛擬機(jī)名 RABBITMQ_DEFAULT_VHOST: admin_vhost # 用戶名 RABBITMQ_DEFAULT_USER: root # 密碼 RABBITMQ_DEFAULT_PASS: devops666 # 指定自定義插件目錄 RABBITMQ_PLUGINS_DIR: '/plugins:/myplugins' ports: - "5672:5672" - "15672:15672" volumes: - ./data:/var/lib/rabbitmq - ./myplugins:/myplugins networks: - devopsnetwork networks: devopsnetwork: external: true ```
部署成功
部署機(jī)器IP:192.168.123.214
安裝插件:延遲消息插件
注意:插件消息發(fā)布延遲只支持到 數(shù)秒、分鐘或數(shù)小時(shí),最多一兩天,注意?。?!
原文: This plugin was designed for delaying message publishing for a number of seconds, minutes, or hours。 A day or two at most.
! ! ! 前面的 compose.yml 默認(rèn)是將。/myplugins 掛載到容器的,并指定了多個(gè)插件目錄 系統(tǒng):/plugins 自己添加:/myplugins ,優(yōu)化了流程,安裝插件不需要復(fù)制文件和重啟容器
-
需要先下載插件:rabbitmq_delayed_message_exchange-3.12.0.ez,下載對(duì)應(yīng)版本的 。ez 文件:Github Releases
-
將下載的插件文件放到 。/myplugins 文件夾 前面將 myplugins 掛載到了容器
-
連接容器執(zhí)行啟用插件:
docker exec -it rabbitmq_3_12 /bin/bash -c "rabbitmq-plugins enable rabbitmq_delayed_message_exchange"
-
因?yàn)橐呀?jīng)掛載 myplugins 和設(shè)置為插件目錄了 會(huì)自己去找 /plugins 和/myplugins 對(duì)應(yīng)的 ez 文件以安裝
-
啟用成功,可在 Exchanges 頁(yè)查看
踩過(guò)的坑
-
根據(jù)上文配置來(lái)不會(huì)再出現(xiàn)下面的問(wèn)題,遇到一樣的問(wèn)題可參考
-
延遲消息僅支持最多一兩天的延遲消息,項(xiàng)目中有個(gè)定時(shí)發(fā)消息的功能,設(shè)置的適合時(shí)間設(shè)置超過(guò)閾值無(wú)法被消費(fèi) 說(shuō)明
-
不要掛載/plugins 插件目錄,可以用
RABBITMQ_PLUGINS_DIR: '/plugins:/myplugins'
來(lái)指定多個(gè)目錄,這樣只需要執(zhí)行 文檔 -
不指定 hostname 節(jié)點(diǎn)名稱會(huì)是容器 Id
-
使用了 rabbitmq:3.x-management 鏡像(具有 web 管理頁(yè)面的功能)但是掛載了空的插件目錄會(huì)報(bào)錯(cuò):
{"init terminating in do_boot",{undef,[{rabbit,boot,[],[]},{init,start_em,1,[]},{init,do_boot,3,[]}]}}
-
Admin 頁(yè)面提示報(bào)錯(cuò):升級(jí)版本吧 issues 我開(kāi)始用的 3.9.29-management(tags 列表排序 3.9 排在前面,( ╯□╰ )),報(bào)這個(gè)錯(cuò)
-
切換版本前需要經(jīng)。/data 數(shù)據(jù)清空,不然啟動(dòng)不起來(lái)
-
Exchanges 頁(yè)面報(bào)錯(cuò): 我把版本換成 3.12.6-management 后報(bào)了這個(gè)錯(cuò),沒(méi)有退出登錄,只需 Ctrl+F5,重新登錄下就好
使用
.NET SDK
官方:RabbitMQ.Client
連接配置
var factory = new ConnectionFactory
{
HostName = "192.168.123.214",
Port = 5672,
VirtualHost = "admin_vhost",
UserName = "root",
Password = "devops666",
};
Demo 示例
建了一個(gè) demo 測(cè)試使用 Demo地址 ,后續(xù)二次封裝的時(shí)候再展開(kāi)說(shuō)怎么封裝使用
相關(guān)文檔
- RabbitMQ 項(xiàng)目倉(cāng)庫(kù)
- DockerHub 鏡像
- 官方文檔
- 延遲消息插件下載
- .NET SDK 倉(cāng)庫(kù)
后語(yǔ)
安裝還是比較簡(jiǎn)單的,版本選對(duì),更多的是使用時(shí)需要根據(jù)業(yè)務(wù)選擇適合的方案文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-738472.html
插件的安裝倒騰了一陣子,研究?jī)?yōu)化了流程文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-738472.html
到了這里,關(guān)于使用 Docker Compose 部署 RabbitMQ 的一些經(jīng)驗(yàn)與踩坑記錄的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!