Подтвердить что ты не робот

В чем разница между очередью: work --daemon и queue: listen

Я устанавливаю свой автономный сервер заданий. Я прочитал документацию, но я до сих пор не вижу различий между двумя командами: artisan queue:work --daemon и artisan queue:listen. Какую команду я должен использовать для запуска моих демонов?

4b9b3361

Ответ 1

Изменить обновленный 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

Ответ 2

Вещи были изменены, но это не было упомянуто в документе

 --daemon  Run the worker in daemon mode (Deprecated)

теперь по умолчанию php artisan queue:work выполняется в режиме демона,

queue:work так queue:work продолжается обработка заданий без перезагрузки фреймворка

для запуска, как только команда

php artisan queue:work --once

Ответ 3

Самое важное отличие состоит в том, что queue:work --daemon не перезапускает фреймворк для каждого задания, а queue:listen делает. Фактически, listen запускает новый новый процесс Laravel для каждого задания.

Попробуйте сами: Откройте 2 терминала и запустите work --daemon в одном и listen в другом. Окно work будет выполнять задания намного быстрее, чем listen.

Ответ 4

Начиная с Laravel 5.7, в команду queue:work добавлена новая опция --stop-when-empty. При использовании этой опции текущая очередь будет обрабатываться до тех пор, пока она не опустеет, затем команда завершится.

Согласно документации:

Опция --stop-when-empty может использоваться, чтобы дать работнику команду обработать все задания и затем завершить работу корректно. Эта опция может быть полезна при работе с очередями Laravel в контейнере Docker, если вы хотите закрыть контейнер после того, как очередь пуста:

php artisan queue:work --stop-when-empty