我有两种从json/csv进口产品和库存的方法。我已经实现了用于排队作业的NestJS Bull模块。两个导入进程都异步运行,运行良好。但是现在我想先完全处理产品导入队列,然后只处理库存输入队列。
jobs.module.ts
BullModule.registerQueueAsync({
name: 'default',
inject: [ConfigService],
useFactory: async (
configService: ConfigService,
): Promise<BullModuleOptions> => ({
redis: {
...
},
defaultJobOptions: {
attempts: 1,
},
}),
})
jobs.service.ts
constructor(@InjectQueue('default') private defaultQueue: Queue) { }
@Cron(CronExpression.EVERY_30_MINUTES)
async queueProductUpdateJob() {
await this.defaultQueue.add('productUpdate');
}
@Cron(CronExpression.EVERY_30_MINUTES)
async queueInventoryUpdateJob() {
await this.defaultQueue.add('inventoryUpdate');
}
jobs.processor.ts
@Process('productUpdate')
async productUpdate(job: Job<unknown>){
console.log('data: ', JSON.stringify(job.data));
await this.updateProductService.importProducts(job.data);
return {};
}
@Process('inventoryUpdate')
async inventoryUpdate(job: Job<unknown>){
console.log('data: ', JSON.stringify(job.data));
await this.updateInventoryService.importInventory(job.data);
return {};
}
我们如何才能先完全处理queueProductUpdateJob
作业,然后才处理queueInventoryUpdateJob
呢?
发布于 2021-05-21 09:28:39
我想如果你像这样改变jobs.service.ts,那就没问题了:(因为每隔30分钟都会有玉米)
jobs.service.ts
constructor(@InjectQueue('default') private defaultQueue: Queue) { }
@Cron(CronExpression.EVERY_30_MINUTES)
async queueProductInventoryUpdateJob() {
await this.defaultQueue.add('productUpdate');
await this.defaultQueue.add('inventoryUpdate');
}
或者您可以使用“从‘异步’导入{ queue }”(如果想告诉我更多的话)来完成它,它将形成一个队列,然后互相执行任务。
https://stackoverflow.com/questions/67607490
复制相似问题