В чем разница между очередью: работа --daemon и очередь: слушать
Я настроил свой автономный сервер работы. Я прочитал документацию, но до сих пор не вижу различий между двумя командами: artisan queue:work --daemon
а также artisan queue:listen
, Какую команду мне использовать для запуска моих демонов?
3 ответа
Редактировать обновлено 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
просто выскочит следующее задание в очереди и обработает только одно задание. Это команда "one off", которая вернется в командную строку после обработки команды queue.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 новая опция --stop-when-empty
был добавлен в queue:work
команда. При использовании этой опции текущая очередь будет обрабатываться до тех пор, пока она не станет пустой, после чего команда завершится.
По документации:
Параметр --stop-when-empty может использоваться, чтобы дать рабочему указание обработать все задания и затем корректно завершить работу. Эта опция может быть полезна при работе с очередями Laravel в контейнере Docker, если вы хотите выключить контейнер после того, как очередь пуста:
php artisan queue:work --stop-when-empty