前言
消息队列是存储数据的一个中间件,可以理解为一个容器。生产者生产消息投递 到队列中,消费者可以拉取消息进行消费,如果消费者目前没有消费的打算,则消息队列会保留消息,直到消费者有消费的打算。
设计思路
生产者
- 连接 redis
- 向指定通道 通过 lpush 消息
消费者
- 连接 redis
- 死循环通过 brpop 阻塞式获取消息
- 拿到消息进行消费
- 循环拿去下一个消息
Redis
安装及启动
此步骤各位道友随意就好,不一定要用docker 。只要保证自己能连接到redis 服务即可。
# 使用docker 拉取redis 镜像
docker pull redis:latest
# 启动redis服务
# --name 后面是容器名字方便后续维护和管理
# -p 后面是指映射容器服务的 6379 端口到宿主机的 6379 端口
docker run -itd --name redis-mq -p 6379:6379 redis
# ============ docker 常用基本操作(题外话) =================
# 拉取镜像
docker pull 镜像名称
# 查看镜像
docker images
# 删除镜像
docker rmi 镜像名称
# 查看运行容器(仅为启动中的)
docker ps
# 查看运行容器(包含未启动)
docker ps -a
# 启动容器
docker start 容器名称/容器id
# 停止容器
docker stop 容器名称/容器id
Nodejs连接
初始化工程
# 创建文件夹并进入
mkdir queue-node-redis && cd queue-node-redis
# yarn 初始化
yarn init -y
# 下载redis包,
# 指定版本的原因是尽量减少道友们的失败几率 毕竟前端的工具迭代太快了
yarn add redis@4.2.0
创建 lib 与 utils 目录
├── .gitignore
├── lib
├── package.json
├── utils
│ └── redis.js
└── yarn.lock
utils/redis.js
const redis = require("redis");
const redisCreateClient = async (config) => {
try {
const client = redis.createClient({
url: `redis://${
config.host}:${
config.port}`,
});
await client.connect();
await client.select(config.db);
console.log("redis connect success");
return client;
} catch (err) {
console.