1. 消息队列是什么?
当用户注册成功后,就发送邮件。当邮件发送成功了,接口才会提示注册成功信息。但由于发送邮件,依赖于其他厂商的服务,有可能他们的接口会非常耗时。那么用户就一直要等着邮件发送成功了,才提示注册成功。因为耗时很长,这样就会造成很糟糕的体验。
然后大家想一想,我们到底有没有必要等着邮件发送完成呢?就好比大家去邮局寄信,当你把信丢入邮筒里,你需要一直等着信送到别人手里,然后你再离开吗?
当然不需要,只要将信丢入邮筒,我们人就可以离开了。因为你知道,在将来的某个时候,你的信就会被寄到收件人手里。
消息队列
,就好比是这里寄信的过程!消息队列
由三部分构成:
- 生产者(Producer):创建并发送消息,相当于去邮局寄信的人。
- 队列(Queue):用来存放消息的,将消息从生产者传递到消费者,就相当于邮局了。邮局收到你的任务后,它去处理是需要排队的。按照先进先出的原则,需要等其他先来的任务处理完了,才会处理你的任务。
- 消费者(Consumer):接收并处理消息的人。当邮局把信送到他手里了,收到消息了,最终处理任务的人。
还是以我们注册功能为例。当用户注册成功了,我们就通知RabbitMQ,你去发个邮件,然后就直接提示用户注册成功。我们完全没有必要等待邮件发送完成。
接着再写一个程序去接收消息,当它收到消息了,就去执行发邮件任务了。
所以,生产者、消费者,都是我们要写的程序。一个负责提交任务,另一个负责处理任务。互相之间通信,就靠中间的RabbitMQ。
2. 安装
2.1. 使用 Docker
当然,我最推荐的还是用Docker
,因为太方便了,大家打开docker-compose.yml
。增加RabbitMQ
的配置,注意缩进非常重要,一定要和之前的MySQL和Redis的配置对齐
services:
mysql:
# ....
redis:
# ....
rabbitmq:
image: rabbitmq:4.0-management
ports:
- "5672:5672"
- "15672:15672"
volumes:
- ./data/rabbitmq:/var/lib/rabbitmq # 持久化数据
environment:
RABBITMQ_DEFAULT_USER: admin
RABBITMQ_DEFAULT_PASS: xw
- 我们这里使用的
RabbitMQ
版本号是:4.0
。 - 将RabbitMQ运行的默认端口
5672
和15672
,映射到本机上。 - 其中
15672
是RabbitMQ自带的管理后台端口号
。 - 接着将
RabbitMQ
的用来持久化数据的备份数据
,映射
到项目根目录的data/rabbitmq
目录中。 - 最下面的是
RabbitMQ
用来连接的账号密码,大家可以根据需要自己设置。
完成后,命令行,再次运行
docker-compose up -d
这样Docker,就会自动下载,并启动好RabbitMQ。
2.2. 直接安装
对于部分Windows
上用不了Docker
的同学,那就有点麻烦了。因为既要安装Erlang
,又要安装RabbitMQ
。这里附上下载地址:
-
Erlang下载地址:https://www.erlang.org/downloads
- -
RabbitMQ下载地址:https://www.rabbitmq.com/docs/install-windows#downloads
-
对于这种安装方式,如果在安装过程出现了各种问题,请来讨论群中和我讨论。总而言之,我还是推荐大家尽可能,想办法将Docker
跑通。
2.3.1 安装完Erlang
和RabbitMQ
后,添加环境变量
打开环境变量设置窗口: 右键点击 “
此电脑
”,选择 “属性
”。 在弹出的窗口中,点击 “高级系统设置
”。 在 “系统属性
” 窗口中,点击 “环境变量
” 按钮。 添加RabbitMQ
命令路径到系统的 Path 变量
: 在 “系统变量
” 列表中找到 “Path
” 变量,选中它
并点击 “编辑
” 按钮。 在弹出的 “编辑环境变量
” 窗口中,点击 “新建
”,然后将RabbitMQ 的 sbin目录路径
添加进去,
例如C:\Program Files\RabbitMQServer\rabbitmq_server-<version>\sbin
。注意要将 替换为你实际安装的 RabbitMQ 版本号。 点击 “确定
” 保存设置,依次关闭所有窗口具体选择你自己安装的路径
>。
2.3.2 通过命令行(管理员)安装rabbitmq_management 插件
RabbitMQ 的管理界面依赖于rabbitmq_management 插件
rabbitmq-plugins enable rabbitmq_management