Node.js Kue - 在应用程序中暂停具有多个实例的工作人员

时间:2015-03-31 16:01:27

标签: node.js node-redis kue

在具有多个实例(比如docker中的多个容器)的应用程序中使用kue时,所有实例都使用相同的redis数据库,如果暂停一个worker,是否需要在所有实例上暂停该worker,或者是在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 );
  });
});

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

1 个答案:

答案 0 :(得分:0)

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

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

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

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