Docker RabbitMQ镜像集群部署
1.RabbitMQ的端口号是什么?
-
4369:
erlang
发现口号; -
5672 :这是
RabbitMQ
的端口号,client
端通信口号; -
15672 :
RabbitMQ
的Web
管理界面ui
的端口号; -
25672 :
server
间内部通信口号;
2.RabbitMQ的架构是什么样的?
publisher发消息(生产者)——> 消息队列[exchange交换机——>Routes路由——>Queue队列] ——>consumer收消息(消费者)
- Publisher: 生产者,发布消息到MQ中的。
- Consumer:消费者,从MQ中接收消息的。
- Exchange:交换机,建立生产者和队列之间联系。
- Queue:队列,存储消息的。
- Routes:路由,交换机以什么样的策略将消息发送给队列。
RabbitMQ完整的结构图:
- Virutal Host 是一个虚拟主机(逻辑上的一个隔断);
- 虚拟主机里面有交换机;还有队列;
- 生产者发消息给消费者,中间要找一个桥梁就是rabbitMQ;
- 生产者发消息给队列首先要建立Connetion对象链接;有了链接之后就可以构建一个通道(Channel)了;一个通道对应一个交换机;
- 交换机发送给队列需要通过路由routes;routes(路由)它决定了消息到底发送给哪一个队列;
- 消费者想从队列里面取数据首先也是要建立一个链接Connection对象;有了链接就可以开辟一个通道了;
RabbitMQ的通信过程:
- 1、生产者建立与MQ的连接。
- 2、建立与具体交换机的通道。
- 3、交换机根据不同的路由规则,将消息发送给对应的队列。
- 4、消费者根据通道消费对应队列中的数据,消费一个数据队列中就少一个数据,一个队列中数据只能被消费一次
注意:
- 消费掉一个数据,队列中就少一个数据;
- 我们不希望各个生产者之间互相影响;所以我们要把他们进行隔离;隔离的方式就是创建虚拟机;
docker-compose部署RabbitMQ镜像集群
1、docker-ce安装
[root@localhost ~]# vim /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://download.docker.com/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=0
[root@SPHQOPENAPIMQ01 ~]# yum install docker-ce -y
1.2.3.4.5.6.7.8.
2、docker-compose安装
[root@localhost ~]# yum install -y python-pip
[root@localhost ~]# pip install -U docker-compose
[root@localhost ~]# docker-compose version
docker-compose version 1.21.0, build 5920eb0
docker-py version: 3.2.1
CPython version: 2.7.5
OpenSSL version: OpenSSL 1.0.1e-fips 11 Feb 2013
1.2.3.4.5.6.7.
3、下载rabbitmq镜像
[root@localhost ~]# docker pull rabbitmq:3.8-management
4、编写docker-compose.yml
[root@Test rcloud]# cd /mnt/
[root@Test mnt]# mkdir RabbitMQ-Cluster
[root@Test mnt]# cd RabbitMQ-Cluster/
[root@Test RabbitMQ-Cluster]# ls
[root@Test RabbitMQ-Cluster]# vim docker-compose.yml
version: '3'
services:
RabbitMQ1:
image: rabbitmq:3.8-management
container_name: RabbitMQ1
ports:
- "15673:15672"
- "5673:5672"
hostname: RabbitMQ1
environment:
- RABBITMQ_ERLANG_COOKIE=rabbitcookie
volumes:
- ./RabbitMQ1:/var/lib/rabbitmq
- /etc/localtime:/etc/localtime
RabbitMQ2:
image: rabbitmq:3.8-management
container_name: RabbitMQ2
ports:
- "15674:15672"
- "5674:5672"
hostname: RabbitMQ2
environment:
- RABBITMQ_ERLANG_COOKIE=rabbitcookie
volumes:
- ./RabbitMQ2:/var/lib/rabbitmq
- /etc/localtime:/etc/localtime
RabbitMQ3:
image: rabbitmq:3.8-management
container_name: RabbitMQ3
ports:
- "15675:15672"
- "5675:5672"
hostname: RabbitMQ3
environment:
- RABBITMQ_ERLANG_COOKIE=