部署RabbitMQ叢集
建立目錄,用于存放
Docker Compose
部署
RabbitMQ
叢集的
yaml
檔案:
mkdir -p /root/composefile/rabbitmq
寫入該
yaml
檔案:
vim /root/composefile/rabbitmq/rabbitmq_cluster.yaml
内容如下所示:
version: '3'
services:
rabbitmq1:
image: rabbitmq:management
restart: always
ports:
- "15673:15672"
- "5673:5672"
hostname: rabbitmq1
container_name: rabbitmq1
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=admin
- RABBITMQ_ERLANG_COOKIE=rabbitmq_erlang_cookie
rabbitmq2:
image: rabbitmq:management
restart: always
ports:
- "5674:5672"
hostname: rabbitmq2
container_name: rabbitmq2
environment:
- RABBITMQ_ERLANG_COOKIE=rabbitmq_erlang_cookie
links:
- rabbitmq1
rabbitmq3:
image: rabbitmq:management
restart: always
ports:
- "5675:5672"
hostname: rabbitmq3
container_name: rabbitmq3
environment:
- RABBITMQ_ERLANG_COOKIE=rabbitmq_erlang_cookie
links:
- rabbitmq1
- rabbitmq2
rabbitmq:management
鏡像是開啟管理插件的
RabbitMQ
鏡像,環境變量
RABBITMQ_ERLANG_COOKIE
需要一緻,開始部署:
docker compose -f /root/composefile/rabbitmq/rabbitmq_cluster.yaml up -d
up
完成。
[+] Running 13/13
⠿ rabbitmq3 Pulled 41.5s
⠿ 08c01a0ec47e Pull complete 19.2s
⠿ 1ceb23964d6c Pull complete 19.8s
⠿ 64631f643e2c Pull complete 33.1s
⠿ 67525726a753 Pull complete 33.2s
⠿ 4b28b554c25b Pull complete 34.4s
⠿ 3afdc08bc87a Pull complete 34.5s
⠿ 1e22dd212ab8 Pull complete 34.6s
⠿ b585ed397156 Pull complete 34.7s
⠿ 68de743a7628 Pull complete 34.7s
⠿ rabbitmq1 Pulled 41.5s
⠿ 68b52ebaee48 Pull complete 36.1s
⠿ rabbitmq2 Pulled 41.5s
[+] Running 4/4
⠿ Network rabbitmq_default Created 0.3s
⠿ Container rabbitmq1 Started 2.8s
⠿ Container rabbitmq2 Started 3.3s
⠿ Container rabbitmq3 Started 5.3s
列出正在運作的
compose
項目。
docker compose ls
RabbitMQ
叢集的所有節點都在運作。
NAME STATUS
rabbitmq running(3)
将
rabbitmq1
作為主節點,需要在
rabbitmq2
和
rabbitmq3
中執行一些指令,将它們加入到叢集。
進入
rabbitmq2
:
docker exec -it rabbitmq2 /bin/bash
執行:
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
# 離開容器
exit
進入
rabbitmq3
:
docker exec -it rabbitmq3 /bin/bash
執行:
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbit@rabbitmq1
rabbitmqctl start_app
# 離開容器
exit
通路
rabbitmq1
的管理界面可以看到
RabbitMQ
叢集的三個節點。
測試
測試代碼參考下面這篇部落格:
- RabbitMQ:@RabbitListener注解簡化消息監聽
隻需要修改配置檔案:
spring:
rabbitmq:
addresses: 192.168.1.7:5673,192.168.1.9:5674,192.168.1.9:5675
username: admin
password: admin
啟動應用,
Spring Boot
會和
RabbitMQ
建立連接配接。
使用
Postman
請求接口。
RabbitMQ
管理界面可以看到消息記錄。
消費者也監聽到了這條消息。