0

我只是在调查 Kue 作为工作处理者。但是我坚持一个概念:

假设我有多个工人,都可以处理 2 种工作类型中的 1 种。

代码看起来像这样:

queue.process("job1", 1, (job, done) => {
    console.log("processing job 1")
})
queue.process("job2", 1, (job, done) => {
    console.log("processing job 2")
})

这个想法是服务将检查所有队列并启动最高优先级的作业。但我不想在每个工人身上并行处理一种以上的工作类型。

这样做的问题是,如果将“job1”和“job2”同时添加到队列中,则上述过程将并行启动。

实际上,我将拥有“N”个作业类型,每个作业类型都具有可配置的并行运行。我不希望每种工作类型有一个单独的流程,因为这很难扩展。每个进程都应该能够处理任何工作类型。

如何确保任何一个工人一次只能处理 1 批作业类型?

4

1 回答 1

2

解决此问题的一种方法是只有一个队列作业类型,但在传递给作业的数据中指定一个作业类型,并基于此进行处理。

queue.create('alljobs', {type: 'jobType1'});
queue.create('alljobs', {type: 'jobType2'});

queue.process('alljobs', 1, (job, done) => {
  if(job.data.type === 'jobType1') {
    console.log("processing job 1");
  } else if(job.data.type === 'jobType2') {
    console.log("processing job 2");
  }
});
于 2017-03-16T11:53:33.033 回答