文章目錄
透過 docker compose 啟動 RabbitMQ cluster
最近在驗證整合 RabbitMQ cluster 的相關功能,常常要重新建立 RabbitMQ cluster,不過直接重新安裝 RabbitMQ cluster 還是覺得耗時,所以興起想要透過 docker compose 快速啟動 RabbitMQ cluster 的想法,簡單紀錄嘗試過程備忘
基本環境說明
- macOS Big Sur 11.6
- docker desktop 3.6.0(67351)
docker images
- rabbitmq:3.9.10-management
設定方式
Dockerfile
FROM rabbitmq:management COPY cluster-entrypoint.sh /usr/local/bin/ ENTRYPOINT /usr/local/bin/cluster-entrypoint.sh
cluster-entrypoint.sh
#!/bin/bash # 在背景啟動 rabbitmq service /usr/local/bin/docker-entrypoint.sh rabbitmq-server -detached # 等待 rabbitmq 啟動完畢 sleep 5s # 停止 rabbitmq application rabbitmqctl stop_app # 加入 rabbimtq cluster rabbitmqctl join_cluster rabbit@rabbitmq-1 # 啟動 rabbitmq application 來 sync 資料 rabbitmqctl start_app # 停止 rabbitmq service rabbitmqctl stop # 等待 rabbitmq service 完全停止 sleep 2s # 將 rabbitmq service 啟動在前景 rabbitmq-server
docker-compose.yml
version: '3' services: rabbitmq-1: image: rabbitmq:3.9.10-management hostname: rabbitmq-1 environment: - RABBITMQ_DEFAULT_VHOST=/ - RABBITMQ_DEFAULT_USER=admin - RABBITMQ_DEFAULT_PASS=pass.123 - RABBITMQ_ERLANG_COOKIE=yowkotest ports: - "5672:5672" - "15672:15672" rabbitmq-2: # 如果需要調整 rabbitmq 的設定,可以在調整完 cluster-entrypoint.sh 後,將下方三行取消註解,自行 build image # build: # context: ./ # dockerfile: Dockerfile image: yowko/rabbitmq:3.9.10-management hostname: rabbitmq-2 environment: - RABBITMQ_ERLANG_COOKIE=yowkotest depends_on: - rabbitmq-1 ports: - "5673:5672" - "15673:15672" rabbitmq-3: image: yowko/rabbitmq:3.9.10-management hostname: rabbitmq-3 environment: - RABBITMQ_ERLANG_COOKIE=yowkotest depends_on: - rabbitmq-1 ports: - "5674:5672" - "15674:15672"
使用方式
自行 build
docker-compose up --build -d
直接使用
docker-compose up -d
心得
我在執行當下遇過 rabbitmq-2
在啟動並成功加入 cluster 後又 shutdown 的狀況,推測是啟動時等待的時間不夠長造成的,不過發生機會不高就不直接延長等待時間,如果真的遇到無法啟動,重新啟動即可
完整原始碼: yowko/rabbitmq-cluster
參考資訊
文章作者 Yowko Tsai
上次更新 2021-11-26
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。