Nodejs+Redis 实现简易消息队列
前言
消息队列是存储数据的一个中间件,可以理解为一个容器。生产者生产消息投递 到队列中,消费者可以拉取消息进行消费,如果消费者目前没有消费的打算,则消息队列会保留消息,直到消费者有消费的打算。
设计思路
生产者
连接 redis
向指定通道 通过 lpush 消息
消费者
连接 redis
死循环通过 brpop 阻塞式获取消息
拿到消息进行消费
循环拿去下一个消息
Redis
安装及启动
此步骤各位道友随意就好,不一定要用 docker 。只要保证自己能连接到 redis 服务即可。
复制代码
Nodejs 连接
初始化工程
复制代码
创建 lib 与 utils 目录
复制代码
utils/redis.js
复制代码
index.js
在项目根目录下创建此文件,测试 redis 连接是否成功
复制代码
出现如下图所示即可
minimist
轻量级的命令行参数解析引擎。
复制代码
使用方法
复制代码
复制代码
正文开始
从目录结构及文件创建,手把手教程
目录结构变更
复制代码
config.js
配置文件思路的重要性大于代码的实现
复制代码
参考 前端进阶面试题详细解答
lib/index.js
针对配置做程序异常处理
复制代码
lib/core.js
后面的核心逻辑写在此处
复制代码
核心逻辑
lib/core.js
复制代码
生成测试数据
为了接下来的测试,我们先生成一些测试数据
test/mockMq.js
复制代码
验证脚本有效性
复制代码
定义 Job
后记
到此为止建议队列就实现完成了,当然后面还有一些优化。例如通过配置文件 动态引入 Job 和如何使用 Pm2 启动消费队列并且可配置启动个数、启停控制。(ps:此处的坑会很快补上)
当然除了这些,目前这个简易队列还有很多不足。例如任务执行失败如何处理,消费后如何 ack , 没有用成熟的 topic 协议,没有实现延时队列。这些坑因为个人水平以及 redis 本身的特性 可能很长一段时间都不会填了。建议生产用成熟的套件 例如 Kafka RabbitMq 以及一些其他更适合当前语言的套件。
评论