nestjs - 为@nestjs/bull 创建单独的服务实例
问题描述
我正在尝试为视频处理创建并行队列。
但是,我在这样做时遇到了问题。下面是我想要实现的图表。
流程是:
- 用户向端点发送
GET
请求/process
(实际上,GET 仅用于测试,而是用于@MessagePattern
从其他服务接收数据) - 此请求包含
ModelDTO
以及sequence
用于内部跟踪 private readonly _queueService: QueueService
通过构造函数导入控制器- 然后它调用
this._queueService.process({ model, sequence })
QueueService
@InjectQueue('video_processor') private readonly _processorQueue: Queue
通过构造函数导入QueueService
简单地调用this._processorQueue.add('process', data);
VideoProcessor
private readonly _videoService: VideoService
通过构造函数导入- 里面
VideoProcessor
有一个带@Process('process')
装饰器的方法 - 在这个方法中,我正在等待服务的结果
await this._videoService.configure(job.data).process()
这就是问题所在:
- 每当我尝试一次运行 1 个作业(发送单个请求并实际等待作业完成)时,一切正常
- 如果我同时排队两个作业,出于某种原因,
console.log(this._videoData.id)
内部VideoService
现在将返回第二个模型的 ID,而不是实际 ID。
到目前为止,我已经尝试添加scope: Scope.TRANSIENT
到几乎所有的服务,但没有运气。好像我只是不知道应该在哪里添加这个范围。
我期望 10 个作业能够并行运行,但是,如果我将超过 1 个作业添加到队列中,它们就会开始混合来自其他作业的数据。
解决方案
推荐阅读
- php - 传递类名以查看控制器索引方法上的策略返回错误,即传递的参数太少
- java - 使用Gradle解压Jar文件时如何让文件夹出现?
- java - 如何在 mediaplayer 对象上通过 http 播放广播频道?
- flutter - BLE 连接到 Flutter 上的 mi 频段
- azure - 如何将应用程序从 AzureDevOps 部署到 Azure 中的自定义 VM?
- python - SQLAlchemy @property 在棉花糖中使用 dump_only 导致“未知字段”错误
- assembly - 在函数调用后弹出 RBX 会使我的函数出现段错误,为什么?
- java - Java 程序有编译错误但运行成功
- javascript - 如何将变量从 JS 发送到我的 Laravel 控制器
- android - 按下返回键时如何退出ZXing的扫描模式