部署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:Docker Compose部署RabbitMQ集群_bash

测试

测试代码参考下面这篇博客:

  • ​​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​​建立连接。

RabbitMQ:Docker Compose部署RabbitMQ集群_rabbitmq_02


RabbitMQ:Docker Compose部署RabbitMQ集群_erlang_03


使用​​Postman​​请求接口。

RabbitMQ:Docker Compose部署RabbitMQ集群_分布式_04


​RabbitMQ​​管理界面可以看到消息记录。

RabbitMQ:Docker Compose部署RabbitMQ集群_erlang_05


消费者也监听到了这条消息。

RabbitMQ:Docker Compose部署RabbitMQ集群_分布式_06

​Docker Compose​​​部署​​RabbitMQ​​集群就介绍到这里,如果博主有说错的地方或者大家有不同的见解,欢迎大家评论补充。