1

在具有多个实例(例如 docker 中的多个容器)且都使用相同的 redis 数据库的应用程序中使用 kue 时,如果您暂停工作人员,您需要在所有实例上暂停该工作人员还是在 redis 级别处理该工作人员?因此为您处理?

https://github.com/Automattic/kue#pause-processing

queue.process('email', function(job, ctx, done){
  ctx.pause( 5000, function(err){
    console.log("Worker is paused... ");
    setTimeout( function(){ ctx.resume(); }, 10000 );
  });
});

如果我们不必使用任何实例到实例的通信来让所有工作人员暂停,那就太好了。

4

1 回答 1

0

通过阅读代码,暂停工作人员似乎只是清理了该工作人员的 redis 客户端并停止侦听来自 redis 的事件。

这是相关的代码。 https://github.com/Automattic/kue/blob/master/lib/queue/worker.js#L288-L302

因此,没有什么可以阻止同一应用程序的另一个实例继续处理消息。因此,如果您正在运行同一应用程序的多个实例,并且您想暂停一个工作器,则必须向应用程序的每个实例发出暂停事件已发生的信号。

我们使用 redis 中的 pubsub 功能向所有工作人员发出信号,他们应该暂停/恢复。

于 2015-04-02T22:35:01.950 回答