обработки и ответа на запрос • Гарантия доставки сообщения • Псевдогарантия единственной обработки сообщений • История сообщений • Не думаем о получателях и обработчиках
• Ресайз картинок • Выполнение задач, связанных с внешними системами (которые могут тормозить) • Отправка E-mail • Получение курсов валют • Расчёт пути по набору адресов через Яндекс.Карты для доставщика
разные задачи обрабатывались разными очередями • Команда — выполняемый класс • Выполнение разрешено с — момент времени, после которого задача будет выполнена • Дата выполнения — когда задача фактически выполнена
«разными» обработчиками очередей • Нужно для того, чтобы более сложные/длительные задачи не тормозили выполнение более простых задач • Разные очереди обрабатываются разными процессорами очередей, число таких процессоров тоже может отличаться
более, чем workersLimit обработчиков очереди (иначе сразу выходит) 2. Запускает бесконечный цикл в котором: 1. Выбирает одну следующую задачу и блокирует её 2. Десериализует объект команды 3. Вызывает - > handle(); 4. После выполнения фиксирует в БД дату выполнения и результат 5. В случае ошибки фиксирует ошибку 3. Проверяет, что исходники команд не изменились, иначе умирает
namespace Techdir\PhpInterface\Queue\Command; class WelcomeMailCommand extends AbstractCommand { public static int $maxRetries = 30; / / по - умолчанию = 1 public function handle() { . . . } }
если по данному сотруднику уже запланирован расчёт, / / но ещё не выполнен SalaryCalculatorCommand : : dispatch() - > preventDuplicates() - > withId('emp - ' . $user - > id);
ограничивает число процессов, которые можно запустить. • Если работает несколько процессов, они последовательно берут возникающие задачи и обрабатывают их. • Процессы не трогают задачи друг друга за счёт блокировок.
задачи $job = new JobRecord($id); / / Выполнилась ли задача? $job - > isCompleted(); / / Был ли результат $job - > hasResult(); / / Верни результат $job - > getResult();