Как организовать чтобы всегда был запущен процесс обработки очередей в laravel?

Пользователь

от edyth , в категории: PHP , 9 месяцев назад

Как организовать чтобы всегда был запущен процесс обработки очередей в laravel?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от aaron_armstrong , 9 месяцев назад

@edyth 

  1. Создайте команду Artisan:


Вы можете создать новую команду Artisan в Laravel, которая будет обрабатывать вашу очередь. Чтобы создать новую команду Artisan, выполните следующую команду в консоли:

1
php artisan make:command ProcessQueues


В качестве имени команды вы можете использовать любое подходящее имя, которое будет показывать, что эта ко***** служит для обработки очередей.

  1. Настройте метод обработки очередей в команде:


Откройте созданный класс команды и найдите метод 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 секунд.

  1. Запустите команду:


Когда вы написали метод обработки очередей в команде, вы можете запустить команду Artisan в терминале. Например:

1
php artisan process:queues


Когда это выполняется, ко***** начинает бесконечный цикл, слушая задания в очереди и обрабатывая их. Чтобы остановить процесс, нажмите Ctrl+C.

  1. Настройте связку tmux и cron:


Чтобы автоматически запускать команду обработки очередей в 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.