原文地址: www.jianshu.com/p/1ed50e6d4…
Bull是基于Redis的一个Node.js任务队列管理库,支持延迟队列,优先级任务,重复任务,以及原子操作等多种功能.
本文将从基本的使用来分析Bull的源码,对于repeat job,seperate processes等暂不展开.
Bull: Premium Queue package for handling jobs and messages in NodeJS.
相关的信息如下:
- 源码地址: github.com/OptimalBits…
- Branch:
develop
- Last commit: 4f5744a
基本使用
Bull的使用分为三个步骤:
- 创建队列
- 绑定任务处理函数
- 添加任务
如下示例:
const Bull = require('bull')
// 1. 创建队列
const myFirstQueue = new Bull('my-first-queue');
// 2. 绑定任务处理函数
myFirstQueue.process(async (job, data) => {
return doSomething(data);
});
// 3. 添加任务
const job = await myFirstQueue.add({
foo: 'bar'
});
复制代码
创建队列
创建队列是先通过require
然后再通过new
来实现的,因此要先找到require
的入口.打开package.json
:
{
"name": "bull",
"version": "3.7.0",
"description": "Job manager",
"main": "./index.js",
...
}
复制代码
看到入口为index.js
,打开:
module.exports = require('./lib/queue');
module.exports.Job = require('./lib/job');
复制代码
从而找到目标函数所在文件./lib/queue
:
module.exports = Queue;
复制代码
可以看到exports的是Queue
,接着去分析Queue
函数:
const Queue = function Queue(name, url, opts) {
...
// 默认设置
this.settings = _.defaults(opts.settings, {
lockDuration: 30000,
stalledInterval: 30000,
maxStalledCount: 1,
guardInterval: 5000,
retryProcessDelay: 5000,
drainDelay: 5, // 空队列时brpoplp