You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在NestJS BullMQ中配置基于异常类型的自定义退避策略

NestJS Bull队列自定义退避策略配置

要实现根据异常类型动态设置重试延迟的需求,你可以通过两种方式配置Bull队列的自定义退避策略:

方式一:在Job处理器中动态指定退避延迟

这种方式更灵活,直接在业务逻辑的异常捕获环节设置重试延迟:

1. 调整队列注册配置

保留重试次数,移除固定的指数退避配置:

BullModule.registerQueue({
  name: POST_QUEUES.PARSE_POST_QUEUE,
  defaultJobOptions: {
    attempts: 10,
  },
}),

2. 在处理器中捕获异常并设置延迟

在对应的Job处理器里,根据捕获的异常类型,抛出带有backoff属性的错误:

@Processor(POST_QUEUES.PARSE_POST_QUEUE)
export class ParsePostProcessor {
  constructor(private readonly yourService: YourService) {}

  async process(job: Job<any>) {
    try {
      // 执行你的业务逻辑
      await this.yourService.parsePost(job.data);
    } catch (error) {
      const retryError = new Error(error.message);
      // 根据异常类型设置重试延迟
      if (error instanceof AccountNotFound) {
        retryError.backoff = { delay: 20 * 1000 }; // 20秒
      } else {
        retryError.backoff = { delay: 5 * 1000 }; // 5秒
      }
      throw retryError;
    }
  }
}

方式二:注册全局自定义退避策略

如果希望把退避逻辑集中管理,可以注册全局自定义退避策略:

1. 注册自定义退避策略

在应用初始化的地方(比如main.ts)注册自定义策略:

import * as Bull from 'bull';

// 注册名为customAccountBackoff的自定义退避策略
Bull.BackoffStrategy.register('customAccountBackoff', (attemptsMade: number, err: Error) => {
  // 根据异常类型返回对应延迟(毫秒)
  return err instanceof AccountNotFound ? 20 * 1000 : 5 * 1000;
});

2. 队列配置中使用自定义策略

在队列注册时指定使用这个自定义类型:

BullModule.registerQueue({
  name: POST_QUEUES.PARSE_POST_QUEUE,
  defaultJobOptions: {
    backoff: { type: 'customAccountBackoff' },
    attempts: 10,
  },
}),

这种方式下,只要处理器抛出对应的异常,Bull会自动调用自定义策略计算重试延迟。

内容的提问来源于stack exchange,提问作者kabdik

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 14:20:06