@edyth
Вы можете создать новую команду Artisan в Laravel, которая будет обрабатывать вашу очередь. Чтобы создать новую команду Artisan, выполните следующую команду в консоли:
1
|
php artisan make:command ProcessQueues |
В качестве имени команды вы можете использовать любое подходящее имя, которое будет показывать, что эта ко***** служит для обработки очередей.
Откройте созданный класс команды и найдите метод handle(). В этом методе вы можете написать код, который будет обрабатывать вашу очередь. Например:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
public function handle() { while (true) { $job = app('queue')->pop(); if ($job !== null) { $job->fire(); if ($job->isDeletedOrReleased()) { continue; } if ($job->attempts() >= 3) { $job->delete(); } else { $job->release(30); } } else { sleep(1); } } } |
Это пример метода обработки очередей в Laravel. Он использует бесконечный цикл, чтобы постоянно слушать наличие новых заданий в очереди. Если задание найдено, оно выполняется методом fire(). Затем проверяется, удалено ли задание или выпущено, и, если это так, начинается новая итерация. Если же задание не было завершено после трех попыток, оно удаляется, иначе задание попадает обратно в очередь на обработку через 30 секунд.
Когда вы написали метод обработки очередей в команде, вы можете запустить команду Artisan в терминале. Например:
1
|
php artisan process:queues |
Когда это выполняется, ко***** начинает бесконечный цикл, слушая задания в очереди и обрабатывая их. Чтобы остановить процесс, нажмите Ctrl+C.
Чтобы автоматически запускать команду обработки очередей в Laravel, вы можете настроить связку tmux и cron. Tmux - это терминальный мультиплексор, который позволяет запускать несколько сеансов в одном терминале. Cron - это планировщик задач в Linux. Совместно они могут помочь вам запустить команду на постоянной основе.
Сначала запустите tmux командой:
1
|
tmux new-session -s my-session |
Затем введите команду Artisan для обработки очередей. После этого нажмите Ctrl+B, после чего нажмите D, чтобы отсоединить от сеанса. Когда вы хотите вернуться к сеансу, введите команду:
1
|
tmux attach-session -t my-session |
Чтобы запускать эту команду на постоянной основе, вы можете добавить ее в cron, который будет запускать ее каждую минуту:
1
|
* * * * * tmux send-keys -t my-session:0 'php artisan process:queues' Enter |
Это запустит команду Artisan каждую минуту в сеансе my-session.