Не понимаю как работают очереди в Laravel
Всем привет, изучал php, перешел на Laravel. Узнал, что можно запускать процессы в фоновом режиме с помощью очередей(queues). Объясните пожалуйста, что такое jobs и workers, как работает очередь(жизенный цикл или алгоритм). Буду признателен
Читал много статей и смотрел видео, но до конца так и не понял
Ответы (1 шт):
Ну тут всё просто. По аналогии с обычным магазином, очередь это как касса в магазине. За кассой стоит кассир - это worker, он обрабатывает job - т.е. выполняет какие-то действия описанные в job. job это тот алгоритм который необходимо выполнить "в фоне"/"параллельно".
Так вот, допустим необходимо отправлять письмо пользователю при совершении им каких-то действий, соответственно что-бы не ждать пока письмо уйдет и дать пользователю дальше пользоваться сервисом, можно отправить его через очередь.
Для этого логику отправки письма нужно описать в job. Чтобы вызвать отправку через очередь, необходимо предварительно запустить саму очередь, это отдельный экземпляр php процесса, который выполняется отдельно от основного приложения.
Для запуска обработчика очереди необходимо выполнить команду php artisan queue:work.
Если очередь запущена таким образом, то она будет принимать все job которые вы отправляете без указания имени очереди.
Данный вариант подходит для редких задач, но если задача очень актуальна, то очередь быстро набьется и запущенный обработчик будет долго обрабатывать job'ы которые там жду выполнения.
Чтобы избежать этого можно запустить несколько экземпляров воркеров (php artisan queue:work)
Также можно запустить именованные очереди, если хотите чтобы определенные задания выполнялись в отдельных процессах и не ожидали завершения других
для этого очередь запускается с параметром php artisan queue:work --queue=имяОчереди тогда каждый job направленный в эту очередь будет выполняться только этим воркером.
Очень хорошо об этом написано в документации
Может что-то не так написал, не особо силен в объяснениях.
P.S. если вы не понимаете зачем нужны очереди и как с ними работать, вероятно оно вам еще не надо, проще становятся когда необходимо решить определенную прикладную задачу. Учить что-то, ради того чтобы выучить - плохая идея)