У меня есть задача, которая потенциально долго выполняется (часы). Задача выполняется несколькими работниками (экземпляры AWS ECS в моем случае), которые читают из очереди сообщений (в моем случае AWS SQS). У меня есть несколько пользователей, добавляющих сообщения в очередь. Проблема в том, что если Боб добавляет 5000 сообщений в очередь, этого достаточно для того, чтобы рабочие были заняты в течение 3 дней, Алиса приходит и хочет обработать 5 задач, Алиса должна будет ждать 3 дня, прежде чем любая из задач Алисы даже запустится.
Я хотел бы с одинаковой скоростью подавать сообщения рабочим от Алисы и Боба, как только Алиса отправляет задания.
Я решил эту проблему в другом контексте, создав несколько очередей (вложенных очередей) для каждого пользователя (или даже каждой партии, отправляемой пользователем) и чередуя все вложенные очереди, когда потребитель запрашивает следующее сообщение.
Кажется, по крайней мере в моем мире, это общая проблема, и мне интересно, знает ли кто-нибудь об устоявшемся способе ее решения.
Я не вижу решения с ActiveMQ. Я немного посмотрел на Кафку с его способностью разбивать разделы по теме, и это может сработать. Прямо сейчас я реализую что-то, используя Redis.