Работник очереди Laravel с cron

Я пытаюсь заставить мой веб-сайт отправлять электронные письма с подтверждением каждый раз, когда кто-то регистрируется.

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

в моем кроне бегает каждую минуту и ​​звонит php artisan schedule:run

в моей консоли / Ядро

protected function schedule(Schedule $schedule)
{
    $schedule->command('queue:work --once')->everyMinute()->withoutOverlapping();
}

я добавил параметр --once, потому что работник очереди не существует, когда я закончил, и я не хочу, чтобы много новых процессов выполнялось каждую минуту.

Есть ли способ заставить работника очереди завершить все задания и выйти, а затем запустить его снова через одну минуту, чтобы у меня не было много экземпляров, или это только один экземпляр??

я прочитал, что могу вернуть ноль, чтобы выйти из работника, но если это можно сделать, то как я могу вернуть ноль только после того, как последняя работа выполнена?

2 ответа

Для тех, кто все еще ищет решение, в laravel 5.7 добавлена ​​поддержка запуска всех заданий в очереди, а затем остановка работника очереди, когда все задания выполнены.

Исходный код команды очереди на Github

плюс есть пакет для старых версий laravel

https://github.com/orobogenius/sansdaemon

После Laravel 5.7 очередь: работа запускается как демон, и после запуска команды она будет продолжать работать до тех пор, пока не будет остановлена ​​вручную. Вам не нужно запускать задание cron, чтобы запускать его снова и снова каждую минуту. Чтобы процесс Queue:Work постоянно работал в фоновом режиме, вам следует использовать монитор процесса, например Supervisor, чтобы гарантировать, что работник очереди не перестанет работать. Процесс очереди:работы может прекратить работу по ряду причин, таких как превышение времени ожидания рабочего процесса или выполнение команды очередь:рестарт. Supervisor может определить, когда ваши очереди: рабочие процессы завершаются, и автоматически перезапустить их.

Супервизор будет следить за тем, чтобы рабочая очередь всегда работала в фоновом режиме. Ниже ссылка на кураторов

https://laravel.com/docs/10.x/queues#supervisor-configuration

Всякий раз, когда на вашем сайте регистрируется новый пользователь, отправленное задание будет добавлено в очередь. Работа певца, которая постоянно активна, выполнит эту работу. Используя супервизор, вы можете запускать несколько работников одновременно, если у вас есть тысячи заданий каждый час.

Другие вопросы по тегам