Как получить доступ к рабочим запросам в очереди?

Я реализую веб-сервер с использованием nodejs, который должен обслуживать множество одновременных запросов. Поскольку nodejs обрабатывает запросы один за другим, он сохраняет их во внутренней очереди (я думаю, в libuv).

Я также хочу запустить свой веб-сервер с помощью модуля cluster, поэтому на каждого работника будет одна очередь запросов.

Вопросы:

  1. Если какой-либо рабочий умирает, как я могу получить его запросы в очереди?
  2. Как я могу поместить полученные запросы в очереди других рабочих?
  3. Есть ли какой-либо API для доступа к очереди запросов живых рабочих?

Под номером 3 я хочу хранить запросы в очереди где-нибудь, например, в Redis (если это возможно), чтобы в случае сбоя сервера, сбоя или даже перезагрузки оборудования я мог их получить.


person Majid Yaghouti    schedule 20.07.2019    source источник


Ответы (1)


Как вы упомянули в тегах, которые вы уже используете / хотите использовать Redis, вы можете использовать диспетчер очередей на основе Redis, чтобы сделать всю работу за вас.

Оформить заказ https://github.com/OptimalBits/bull (или его альтернативы).

bull имеет представление о queue. вы добавляете задания в queue и слушаете одну и ту же очередь из разных процессов/vms. bull отправит одно и то же задание только одному слушателю, и у вас есть возможность контролировать, сколько заданий каждый слушатель обрабатывает одновременно (concurrency-level).

Кроме того, если одно из заданий не запустится (другими словами, прослушиватель очереди выдал ошибку), bull попытается передать это же задание другому слушателю.

person Stav Alfi    schedule 23.10.2020