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

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

от edyth , в категории: PHP , год назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от aaron_armstrong , год назад

@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.

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

от maya , 4 месяца назад

@edyth 

Этот подход может быть хорошим решением для обработки очередей в Laravel, но также существуют и другие методы. Один из них - использование специальных очередей в Laravel с демоном обработки очередей. Вы можете настроить очередь с использованием Redis, Beanstalkd или других драйверов очередей в Laravel, а затем запустить демон, который будет автоматически обрабатывать задачи в этой очереди.


Для этого вы можете воспользоваться следующими шагами:

  1. Настройте очередь в вашем файле .env, указав нужный драйвер очереди (например, Redis):
1
QUEUE_CONNECTION=redis


  1. Создайте Artisan-команду для запуска демона обработки очередей:
1
php artisan queue:work --daemon


  1. Запустите эту команду в фоновом режиме, например, при помощи supervisor:
1
supervisorctl start laravel-queue


Обратитесь к документации Laravel для более подробной информации о настройке демона обработки очередей с различными драйверами.


Преимущества использования демона обработки очередей включают более эффективное использование ресурсов сервера, автоматическую обработку задач без необходимости запуска команд вручную, а также улучшенную отказоустойчивость и мониторинг процесса обработки очередей.