首页 > 解决方案 > 为@nestjs/bull 创建单独的服务实例

问题描述

我正在尝试为视频处理创建并行队列。

但是,我在这样做时遇到了问题。下面是我想要实现的图表。

在此处输入图像描述

流程是:

  1. 用户向端点发送GET请求/process(实际上,GET 仅用于测试,而是用于@MessagePattern从其他服务接收数据)
  2. 此请求包含ModelDTO以及sequence用于内部跟踪
  3. private readonly _queueService: QueueService通过构造函数导入控制器
  4. 然后它调用this._queueService.process({ model, sequence })
  5. QueueService@InjectQueue('video_processor') private readonly _processorQueue: Queue通过构造函数导入
  6. QueueService简单地调用this._processorQueue.add('process', data);
  7. VideoProcessorprivate readonly _videoService: VideoService通过构造函数导入
  8. 里面VideoProcessor有一个带@Process('process')装饰器的方法
  9. 在这个方法中,我正在等待服务的结果await this._videoService.configure(job.data).process()

这就是问题所在:

  1. 每当我尝试一次运行 1 个作业(发送单个请求并实际等待作业完成)时,一切正常
  2. 如果我同时排队两个作业,出于某种原因,console.log(this._videoData.id)内部VideoService现在将返回第二个模型的 ID,而不是实际 ID。

到目前为止,我已经尝试添加scope: Scope.TRANSIENT到几乎所有的服务,但没有运气。好像我只是不知道应该在哪里添加这个范围。

在此处输入图像描述

我期望 10 个作业能够并行运行,但是,如果我将超过 1 个作业添加到队列中,它们就会开始混合来自其他作业的数据。

标签: nestjs

解决方案


推荐阅读