oowl
@oowl

Как настроить RabbitMQ на равномерное выполнение разных типов задач?

В системе есть пользователи, их число неограничено и неизвестно. Каждый пользователь может создать очередь из задач. Есть ограниченное число воркеров, которые должны выполнять задачи пользователей равномерно.

Возьмем для простоты один воркер и одного пользователя системы, который создал 3 задачи.
user_id=1, task_id=1
user_id=1, task_id=2
user_id=1, task_id=3


Одним воркером задачи будут исполняться последовательно. И все в порядке.

Теперь предположим, что второй пользователь создал свои три задачи на миллисекунду позже. Итого, воркер будет разбирать их в таком порядке.
user_id=1, task_id=1
user_id=1, task_id=2
user_id=1, task_id=3
user_id=2, task_id=4
user_id=2, task_id=5
user_id=2, task_id=6


Необходимо добиться поведения, когда при наличии множества пользователей, их задачи выполняются равномерно.
user_id=1, task_id=1
user_id=2, task_id=4
user_id=1, task_id=2
user_id=2, task_id=5
user_id=1, task_id=3
user_id=2, task_id=6


Я попробовал сделать подобное при помощи topic exchange, указав route key как task.USERID, затем подписался на task.*, но это привело к тому, что одна и та же задача стала доставляться всем воркерам.

Возможно, я не правильно понимаю как это работает, либо подобный класс задач решается иначе?
  • Вопрос задан
  • 486 просмотров
Пригласить эксперта
Ответы на вопрос 1
KorroLion
@KorroLion
Мне кажется Rabbit предполагает последовательное выполнение задач без вариантов. Это решение под хайлоад в первую очередь.
Если важно распределение, то воркеры работают продолжительное время, значит очередь не многомиллионная. Что мешает сделать данную очередь в Mysql, например?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы