bull 在add job 时,有一个 backoff 选项,用于指定当 job 失败时的退避策略
backoff?: number | BackoffOptions | undefined;
interface BackoffOptions {
/** 策略类型,可以是自定义类型,也可以是内建类型 fixed / exponential */
type: string;
/** 退避延迟,由退避策略函数使用 */
delay?: number | undefined;
/** 定制策略选项 */
options?: any;
}
具体的说,当 job 失败时会根据策略函数,得到一个 delay 值
根据 delay 来决定让 job 失败 / 重试 job / 延迟 job
const delay = await backoffs.calculate(....);
if (delay === -1) {
moveToFailed = true;
} else if (delay) {
...
multi.moveToDelayed(args);
command = 'delayed';
} else {
multi.retry