NestJS Bull 将错误记录到 Sentry

NestJS Bull Log errors to Sentry

我最近将 Bull 添加到我的项目中以卸载诸如将文档同步到第 3 方服务之类的事情,并且一切正常,除了处理作业时发生的错误不会在 Sentry 中结束。他们只自己登录作业,但由于我们 运行 我们的应用程序具有多种配置,这意味着我必须不断监视所有这些实例以查找作业处理错误。

我知道我可以向处理器添加错误处理程序,但我已经有很多处理器了,所以我更喜欢另一个更全球化的解决方案

有什么方法可以确保这些错误也发送到 Sentry?

我无法找到全局执行此操作的方法,但我能够创建一个基本处理器 class 来实现 OnQueueFailed Event Listener 并向哨兵报告失败。我的所有处理器都继承自它,它似乎运行良好。

基础Class:

import { OnQueueFailed } from '@nestjs/bull';
import { Logger } from '@nestjs/common';
import * as Sentry from '@sentry/node';
import { Job } from 'bull';

export abstract class BaseProcessor {
  protected abstract logger: Logger;

  @OnQueueFailed()
  onError(job: Job<any>, error: any) {
    Sentry.captureException(error);
    this.logger.error(
      `Failed job ${job.id} of type ${job.name}: ${error.message}`,
      error.stack,
    );
  }
}

处理器:

import { InjectQueue, Process, Processor } from '@nestjs/bull';
import { Logger } from '@nestjs/common';
import { Job, Queue } from 'bull';
import { BaseProcessor } from 'src/common/BaseProcessor';
import { BULL_QUEUES } from 'src/common/queues';

@Processor(BULL_QUEUES.SOME_QUEUE_NAME)
export class SomeProcessor extends BaseProcessor {
  protected readonly logger = new Logger(SomeProcessor.name);

  constructor(
    // dependencies
  ) {
    super();
  }

  @Process()
  async processTask(job: Job) {
    // processor code here
  }
}