Я настраиваю свой автономный сервер вакансий. Я прочитал документацию, но до сих пор не вижу различий между двумя командами: artisan queue:work --daemon
и artisan queue:listen
. Какую команду следует использовать для запуска моих демонов?
В чем разница между очередью: работа --daemon и очередью: слушать
Ответы (4)
Редактировать обновлено 2017-04-07:
Теперь есть три способа запуска вашей очереди:
queue:work
- это новый процесс "демон" (флаг больше не требуется). Фреймворк запустится «один раз», а затем продолжит выполнять задания. Это будет продолжаться бесконечно. Он использует меньше памяти/процессора, чемqueue:listen
, потому что фреймворк все время работает. Вы также должны помнить об использованииqueue:restart
, чтобы заставить очередь обновлять любые изменения кода, которые вы отправляете во время исправления.queue:work --once
— это запустит фреймворк, обработает одно задание, а затем завершит работу. Полезно для тестирования во время разработки и т. д.queue:listen
- это будет запускать фреймворк в каждом цикле, обрабатывать одно задание, затем полностью выключать, а затем снова запускать фреймворк и т. д. и цикл до бесконечности. Это означает, что вся память/процессы освобождаются после обработки каждого задания. Если у вас есть утечки памяти сqueue:work
- попробуйте.
Флаг --daemon
больше не влияет на эти команды.
Исходный ответ:
В списке две разные проблемы.
Есть artisan queue:work
и artisan queue:listen
queue:work
просто извлечет следующее задание в очереди и обработает только это задание. Это одноразовая команда, которая вернется в командную строку после обработки одной команды очереди.queue:listen
будет прослушивать очередь и продолжать обрабатывать все полученные команды очереди. Это будет продолжаться бесконечно, пока вы не остановите его.
В Laravel >=4.2 была добавлена команда --daemon
. Как это работает, просто продолжает запускать очереди напрямую, а не перезагружать всю структуру после обработки каждой очереди. Это необязательная команда, которая значительно снижает требования к памяти и процессору для вашей очереди.
Важным моментом с командой --daemon
является то, что когда вы обновляете свое приложение, вам нужно специально перезапустить свою очередь с помощью queue:restart
, в противном случае вы потенциально можете получить всевозможные странные ошибки, поскольку ваша очередь все еще будет иметь старый код в памяти.
Таким образом, чтобы ответить на ваш вопрос "Какую команду мне следует использовать для запуска моих демонов?", почти всегда ответ будет queue:work --daemon
.
Вещи были изменены, но это не было упомянуто в документе
--daemon Run the worker in daemon mode (Deprecated)
теперь по умолчанию php artisan queue:work
работает в режиме демона,
так что queue:work
продолжайте обрабатывать задания без перезагрузки фреймворка
Команда для запуска один раз:
php artisan queue:work --once
Самое важное отличие состоит в том, что queue:work --daemon
не перезапускает платформу при каждом задании, а queue:listen
делает. Фактически, listen
запускает совершенно новый процесс Laravel для каждого задания.
Попробуйте сами: откройте 2 терминала и запустите work --daemon
в одном и listen
в другом. Окно work
будет выполнять задания намного быстрее, чем listen
.
Начиная с Laravel 5.7, в команду queue:work
добавлена новая опция --stop-when-empty
. При использовании этой опции текущая очередь будет обрабатываться до тех пор, пока она не станет пустой, после чего команда завершит работу.
Согласно документации:
Параметр --stop-when-empty может использоваться, чтобы указать рабочему процессу обрабатывать все задания, а затем корректно завершить работу. Этот параметр может быть полезен при работе с очередями Laravel в контейнере Docker, если вы хотите закрыть контейнер после того, как очередь пуста:
php artisan queue:work --stop-when-empty