В чем разница между очередью: работа --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
Другие вопросы по тегам