首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Nestjs计划逐个执行队列

Nestjs计划逐个执行队列
EN

Stack Overflow用户
提问于 2021-05-19 16:46:49
回答 1查看 2K关注 0票数 0

我有两种从json/csv进口产品和库存的方法。我已经实现了用于排队作业的NestJS Bull模块。两个导入进程都异步运行,运行良好。但是现在我想先完全处理产品导入队列,然后只处理库存输入队列。

jobs.module.ts

代码语言:javascript
运行
复制
BullModule.registerQueueAsync({
  name: 'default',
  inject: [ConfigService],
  useFactory: async (
    configService: ConfigService,
  ): Promise<BullModuleOptions> => ({
    redis: {
      ...
    },
    defaultJobOptions: {
      attempts: 1,
    },
  }),
})

jobs.service.ts

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
@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呢?

EN

回答 1

Stack Overflow用户

发布于 2021-05-21 09:28:39

我想如果你像这样改变jobs.service.ts,那就没问题了:(因为每隔30分钟都会有玉米)

jobs.service.ts

代码语言:javascript
运行
复制
constructor(@InjectQueue('default') private defaultQueue: Queue) { }

@Cron(CronExpression.EVERY_30_MINUTES)
async queueProductInventoryUpdateJob() {
    await this.defaultQueue.add('productUpdate');
    await this.defaultQueue.add('inventoryUpdate');
}

或者您可以使用“从‘异步’导入{ queue }”(如果想告诉我更多的话)来完成它,它将形成一个队列,然后互相执行任务。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67607490

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档