4

我正在使用 nodejs 实现一个 Web 服务器,它必须服务于大量并发请求。当 nodejs 一个一个地处理请求时,它将它们保存在一个内部队列中(我猜是在 libuv 中)。

我还想使用cluster模块运行我的 Web 服务器,因此每个工作人员将有一个请求队列。

问题:

  1. 如果任何工作人员死亡,我如何检索其排队的请求?
  2. 如何将检索到的请求放入其他工作人员的队列中?
  3. 是否有任何 API 可以访问活着的工作人员的请求队列?

到第 3 位时,我想将排队的请求保留在 Redis 之类的地方(如果可能的话),以便在服务器崩溃、故障甚至硬件重启的情况下,我可以检索它们。

4

1 回答 1

0

正如您在您正在使用/想要使用redis的标签中提到的那样,您可以使用基于redis的队列管理器为您完成所有工作。

结帐https://github.com/OptimalBits/bull(或它的替代品)。

bull有一个概念queue。您将作业添加到queue并收听来自不同进程/虚拟机的同一队列。bull将仅将相同的作业发送给一个侦听器,并且您可以控制每个侦听器同时处理多少作业(concurrency-level)。

此外,如果其中一个作业运行失败(换句话说,队列的侦听器抛出了错误),bull将尝试将相同的作业交给不同的侦听器。

于 2020-10-23T18:06:28.517 回答