NodeJS初探 - egg.js
简单用egg.js搭建一个消息系统,可实现异步消息队列、延迟消息队列
以及替代corntab的定时任务
1、egg.js
- 1.1、定时任务
1 | cron-parser 支持可选的秒(linux crontab 不支持) |
1 | module.exports = { |
- 1.2、自定义定时任务
在 agent.js 中继承 agent.ScheduleStrategy,然后通过 agent.schedule.use() 注册即可:
1 | const config = { redis: agent.redis }; |
ScheduleStrategy 基类提供了:
- schedule - 定时任务的属性,disable 是默认统一支持的,其他配置可以自行解析。
- this.sendOne(…args) - 随机通知一个 worker 执行 task,args 会传递给 subscribe(…args) 或 task(ctx, …args)。
- `this.sendAll(…args) - 通知所有的 worker 执行 task
2、bee-queue
采用redis作为驱动的消息队列中间件,支持异步队列、延迟队列
2.1、创建队列实例
创建队列需要一个beeQueue的实例,为了避免redis连接数爆炸,所以这里要用到单例
1 | // app.js |
- 2.2、队列入队
1 | const job = this.app.redisQueue.createJob({name: 'test', data: {}}); |
3、实现异步队列
- 3.1、定义一个控制器用于接收data创建异步队列
- 3.2、在agent.js中自定义定时任务
- 3.3、根据队列name创建schedule
1 | // queue.js |
- 3.4、根据name创建对应service
1 | // queueService.js |