Я создаю приложение с микросервисом, которое для целей этого вопроса состоит из 3 частей: «загрузчик», который будет принимать сообщение от другой службы и POST-сообщения в очередь сообщений RESTful, сама очередь сообщений и рабочая служба, которая будет ПОЛУЧАТЬ сообщения от службы и обрабатывать сообщения.
В большинстве очередей, с которыми я работал, вы обычно имеете открытое соединение между очередью и службой worker. Ограничение этой текущей проблемы заключается в том, что очередь доступна только через RESTful API. Мне интересно, какой шаблон лучше всего настроить для рабочего сервиса? У меня есть несколько идей, но я был бы признателен за некоторую критику за каждый подход.
- Настройте cron, который будет опрашивать очередь сообщений каждые x секунд.
Плюсы: из этих решений кажется наиболее надежным - всегда получать следующее сообщение, даже если в предыдущем задании есть ошибка.
Минус: дает возможность для длительных заданий, которые две работы выполняются (одним и тем же работником) одновременно, что в первую очередь сводит на нет назначение очереди
Настройка какой-то рекурсивной функции, которая после завершения обработки текущего задания go проверяет наличие другого сообщения, если сообщений нет, проверяет другое сообщение через x секунд, если есть сообщение, работает job.
Pro: устраняет недостаток решения №1
Con: если возникает какая-либо непредвиденная ошибка, она может нарушить рекурсивную функцию, что приведет к сбою службы.
Любые комментарии или лучшие решения приветствуются. Также следует упомянуть, что «рабочий» сервис - это сервис node.js / express.