Как запускать только одну задачу в очереди laravel?
Есть сервис SAAS в котором есть модель Users, она имеет связь с моделью Accounts.
Для каждого Accounts генерируются задачи и ставятся в очередь, некоторые задачи, цепочки задач. По завершении генерируют еще задачи для этого же аккаунта.
Работает это все на Horizon + redis.
Документацию читал, насколько я понял это можно сделать с использованием Redis::funnel('key') - но такой вариант предполагает что воркер будет постоянно брать задачу, обламываться - возвращать задачу и так по кругу, а задач очень много. Таймаутами разруливать тоже не удобно - задачи должны выполняться одна за другой тутже.
1 воркер 1 очередь тоже так себе вариант - как быть с тем что юзеров 10000 - соответственно и очередей столькоже.
Как организовать очередь что бы параллельно могли запускаться задачи для разных аккаунтов, но только 1 задача для одного аккаунта.
Возможно стоит посмотреть в сторону rabbitmq, там есть более гибкое управление очередями, можно ставить теги на задачи.
С примером ответить или ткнуть в доку к сожалению не могу.
Сергей Соколов, Да пожалуй Вы правы - тоже думал об этом. Job Chaining немного не то - оно пометит задачу родителя проваленной и заставит всю цепочку перевыполняться - что совершенно не требуется.
rst630, Возможно использовать Redis::funnel + retryUntil?
С оф. доки:
Releasing a rate limited job back onto the queue will still increment the job's total number of attempts. You may wish to tune your tries and maxExceptions properties on your job class accordingly. Or, you may wish to use the retryUntil method to define the amount of time until the job should no longer be attempted.