В системе есть пользователи, их число неограничено и неизвестно. Каждый пользователь может создать очередь из задач. Есть ограниченное число воркеров, которые должны выполнять задачи пользователей равномерно.
Возьмем для простоты один воркер и одного пользователя системы, который создал 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.*
, но это привело к тому, что одна и та же задача стала доставляться всем воркерам.
Возможно, я не правильно понимаю как это работает, либо подобный класс задач решается иначе?