Работник очереди 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
После Laravel 5.7 очередь: работа запускается как демон, и после запуска команды она будет продолжать работать до тех пор, пока не будет остановлена вручную. Вам не нужно запускать задание cron, чтобы запускать его снова и снова каждую минуту. Чтобы процесс Queue:Work постоянно работал в фоновом режиме, вам следует использовать монитор процесса, например Supervisor, чтобы гарантировать, что работник очереди не перестанет работать. Процесс очереди:работы может прекратить работу по ряду причин, таких как превышение времени ожидания рабочего процесса или выполнение команды очередь:рестарт. Supervisor может определить, когда ваши очереди: рабочие процессы завершаются, и автоматически перезапустить их.
Супервизор будет следить за тем, чтобы рабочая очередь всегда работала в фоновом режиме. Ниже ссылка на кураторов
https://laravel.com/docs/10.x/queues#supervisor-configuration
Всякий раз, когда на вашем сайте регистрируется новый пользователь, отправленное задание будет добавлено в очередь. Работа певца, которая постоянно активна, выполнит эту работу. Используя супервизор, вы можете запускать несколько работников одновременно, если у вас есть тысячи заданий каждый час.