
从本章开始,我们一起在Docker环境实战RabbitMQ环境部署和对应的Java开发,当前是《Docker下RabbitMQ四部曲》系列的第一篇,整个系列由以下四篇文章组成:
原文地址:https://blog.csdn.net/boling_cavalry/article/details/80212878
本次实战的环境信息如下:
本章的实战步骤简述如下:
rabbitmq:
image: bolingcavalry/rabbitmq-server:0.0.3
hostname: rabbitmq
ports:
- "15672:15672"
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=888888
producer:
image: bolingcavalry/rabbitmqproducer:0.0.2-SNAPSHOT
hostname: producer
links:
- rabbitmq:rabbitmqhost
ports:
- "18080:8080"
environment:
- mq.rabbit.address=rabbitmqhost:5672
- mq.rabbit.username=admin
- mq.rabbit.password=888888
consumer:
image: bolingcavalry/rabbitmqconsumer:0.0.5-SNAPSHOT
hostname: consumer
links:
- rabbitmq:rabbitmqhost
environment:
- mq.rabbit.address=rabbitmqhost:5672
- mq.rabbit.username=admin
- mq.rabbit.password=888888
- mq.rabbit.queue.name=consumer.queue
名称 | 作用 | IP地址 |
|---|---|---|
single_rabbitmq_1 | RabbitMQ服务器 | 172.17.0.2 |
single_producer_1 | 生产消息的web应用 | 172.17.0.4 |
single_consumer_1 | 消费消息的web应用 | 172.17.0.3 |
单机版的RabbitMQ环境已经部署完毕,接下来我们来体验一番:

2018-05-12 10:40:23.851 INFO 1 --- [cTaskExecutor-2] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [rabbitmqhost:5672]
2018-05-12 10:40:23.878 WARN 1 --- [172.17.0.2:5672] c.r.c.impl.ForgivingExceptionHandler : An unexpected connection driver error occured (Exception message: Socket closed)
2018-05-12 10:40:28.890 INFO 1 --- [cTaskExecutor-2] o.s.a.r.l.SimpleMessageListenerContainer : Restarting Consumer@25023b5b: tags=[{}], channel=null, acknowledgeMode=AUTO local queue size=0
2018-05-12 10:40:28.892 INFO 1 --- [cTaskExecutor-3] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [rabbitmqhost:5672]
2018-05-12 10:40:28.900 INFO 1 --- [cTaskExecutor-3] o.s.a.r.c.CachingConnectionFactory : Created new connection: connectionFactory#29f69090:4/SimpleConnection@1fff76dd [delegate=amqp://admin@172.17.0.2:5672/, localPort= 36948]
2018-05-12 11:40:57.048 INFO 1 --- [cTaskExecutor-3] c.b.r.receiver.FanoutReceiver : receive message : hello, aaa, bbb, 2018-05-12 11:40:56



至此,单机版的RabbitMQ我们就体验完毕了,接下来开始体验集群版的RabbitMQ;
在刚才创建的docker-compose.yml文件所在目录下执行命令docker-compose down,即可将刚才创建的三个容器彻底清除,如下所示:
root@maven:/usr/local/work/github/blog_demos/rabbitmq_docker_files/single# docker-compose down
Stopping single_producer_1 ... done
Stopping single_consumer_1 ... done
Stopping single_rabbitmq_1 ... done
Removing single_producer_1 ... done
Removing single_consumer_1 ... done
Removing single_rabbitmq_1 ... doneversion: '2'
services:
rabbit1:
image: bolingcavalry/rabbitmq-server:0.0.3
hostname: rabbit1
ports:
- "15672:15672"
environment:
- RABBITMQ_DEFAULT_USER=admin
- RABBITMQ_DEFAULT_PASS=888888
rabbit2:
image: bolingcavalry/rabbitmq-server:0.0.3
hostname: rabbit2
depends_on:
- rabbit1
links:
- rabbit1
environment:
- CLUSTERED=true
- CLUSTER_WITH=rabbit1
- RAM_NODE=true
ports:
- "15673:15672"
rabbit3:
image: bolingcavalry/rabbitmq-server:0.0.3
hostname: rabbit3
depends_on:
- rabbit2
links:
- rabbit1
- rabbit2
environment:
- CLUSTERED=true
- CLUSTER_WITH=rabbit1
ports:
- "15675:15672"
producer:
image: bolingcavalry/rabbitmqproducer:0.0.2-SNAPSHOT
hostname: producer
depends_on:
- rabbit3
links:
- rabbit1:rabbitmqhost
ports:
- "18080:8080"
environment:
- mq.rabbit.address=rabbitmqhost:5672
- mq.rabbit.username=admin
- mq.rabbit.password=888888
consumer1:
image: bolingcavalry/rabbitmqconsumer:0.0.5-SNAPSHOT
hostname: consumer1
depends_on:
- producer
links:
- rabbit2:rabbitmqhost
environment:
- mq.rabbit.address=rabbitmqhost:5672
- mq.rabbit.username=admin
- mq.rabbit.password=888888
- mq.rabbit.queue.name=consumer1.queue
consumer2:
image: bolingcavalry/rabbitmqconsumer:0.0.5-SNAPSHOT
hostname: consumer2
depends_on:
- consumer1
links:
- rabbit3:rabbitmqhost
environment:
- mq.rabbit.address=rabbitmqhost:5672
- mq.rabbit.username=admin
- mq.rabbit.password=888888
- mq.rabbit.queue.name=consumer2.queue
名称 | 作用 | IP地址 |
|---|---|---|
cluster_rabbit1_1 | 一号RabbitMQ服务器 | 172.17.0.2 |
cluster_rabbit2_1 | 二号RabbitMQ服务器 | 172.17.0.3 |
cluster_rabbit3_1 | 三号RabbitMQ服务器 | 172.17.0.6 |
cluster_producer_1 | 生产消息的web应用 | 172.17.0.4 |
cluster_consumer1_1 | 一号消费消息的web应用 | 172.17.0.5 |
cluster_consumer2_1 | 二号消费消息的web应用 | 172.17.0.7 |
集群版的RabbitMQ环境已经部署完毕,我们来体验一番:

2018-05-12 11:59:17.112 INFO 1 --- [cTaskExecutor-4] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [rabbitmqhost:5672]
2018-05-12 11:59:17.172 INFO 1 --- [cTaskExecutor-4] o.s.a.r.c.CachingConnectionFactory : Created new connection: connectionFactory#55040f2f:6/SimpleConnection@723a07 [delegate=amqp://admin@172.17.0.3:5672/, localPort= 48294]
2018-05-12 12:11:12.187 INFO 1 --- [cTaskExecutor-4] c.b.r.receiver.FanoutReceiver : receive message : hello, aaa, bbb, 2018-05-12 12:11:122018-05-12 11:59:12.199 INFO 1 --- [cTaskExecutor-3] o.s.a.r.c.CachingConnectionFactory : Attempting to connect to: [rabbitmqhost:5672]
2018-05-12 11:59:12.263 INFO 1 --- [cTaskExecutor-3] o.s.a.r.c.CachingConnectionFactory : Created new connection: connectionFactory#568bf312:4/SimpleConnection@11a59930 [delegate=amqp://admin@172.17.0.6:5672/, localPort= 55972]
2018-05-12 12:11:12.187 INFO 1 --- [cTaskExecutor-3] c.b.r.receiver.FanoutReceiver : receive message : hello, aaa, bbb, 2018-05-12 12:11:12


上图中表格表明了以下连接关系: 生产者连接一号RabbitMQ、一号消费者连接二号RabbitMQ、二号消费者连接三号RabbitMQ;


至此,集群版的RabbitMQ我们就体验完毕了,本章旨在让读者您用最少的操作来完成整个体验过程,接下来的文章中,我们会一起实战这些简单操作背后的技术细节;