# RabbitMQ 部署指南

# 1. 单机部署

我们在 Centos7 虚拟机中使用 Docker 来安装。

# 1.1. 下载镜像

方式一:在线拉取

h
docker pull rabbitmq:3-management

方式二:从本地加载

在课前资料已经提供了镜像包:

image-20210423191210349

上传到虚拟机中后,使用命令加载镜像即可:

docker load -i mq.tar

使用命令来查看一下

[root@localhost ~]# docker images
REPOSITORY                   TAG       IMAGE ID       CREATED         SIZE
rabbitmq                     latest    24cc95a2cb57   6 days ago      217MB

# 1.2. 安装 MQ

执行下面的命令来运行 MQ 容器:

docker run \
 -e RABBITMQ_DEFAULT_USER=itcast \
 -e RABBITMQ_DEFAULT_PASS=123321 \
 --name mq \
 --hostname mq1 \
 # ui 管理平台的端口号
 -p 15672:15672 \
 # 消息通信的端口号
 -p 5672:5672 \
 -d \
 rabbitmq:3-management

查看启动状态

[root@localhost ~]# docker ps
CONTAINER ID   IMAGE                   COMMAND                  CREATED         STATUS         PORTS                                                                                                                                                 NAMES
5ca16a608743   rabbitmq:3-management   "docker-entrypoint.s…"   2 minutes ago   Up 2 minutes   4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, :::5672->5672/tcp, 15671/tcp, 15691-15692/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp, :::15672->15672/tcp   mq
[root@localhost ~]#

控制台打印了端口为:15671,在启动容器时配置了账号为:itcast,密码为:123321

访问 uri:http://192.168.249.128:15672

image-20231010162721293

页面功能介绍

Overview:总览

作用:查看节点的一些详细信息

Connections:连接

无论是消息发布者还是消息消费者都应该跟 mq 建立连接

Channels:通道

建立连接后一定要创建一个通道,完后生产者 或者是消费者才能基于 Channel 完成消息的发送和接收

Exchanges:交换机

是消息的路由

Queues:队列

Admin:用户管理

  • Virtual Host:虚拟机可以对每个用户进行一个隔离防止操作冲突

# 2. 集群部署

接下来,我们看看如何安装 RabbitMQ 的集群。

# 2.1. 集群分类

在 RabbitMQ 的官方文档中,讲述了两种集群的配置方式:

  • 普通模式:普通模式集群不进行数据同步,每个 MQ 都有自己的队列、数据信息(其它元数据信息如交换机等会同步)。例如我们有 2 个 MQ:mq1,和 mq2,如果你的消息在 mq1,而你连接到了 mq2,那么 mq2 会去 mq1 拉取消息,然后返回给你。如果 mq1 宕机,消息就会丢失。
  • 镜像模式:与普通模式不同,队列会在各个 mq 的镜像节点之间同步,因此你连接到任何一个镜像节点,均可获取到消息。而且如果一个节点宕机,并不会导致数据丢失。不过,这种方式增加了数据同步的带宽消耗。

我们先来看普通模式集群。

# 2.2. 设置网络

首先,我们需要让 3 台 MQ 互相知道对方的存在。

分别在 3 台机器中,设置 /etc/hosts 文件,添加如下内容:

192.168.150.101 mq1
192.168.150.102 mq2
192.168.150.103 mq3

并在每台机器上测试,是否可以 ping 通对方: