it-swarm.com.ru

В чем разница между очередью: работа --daemon и очередь: слушать

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

60
Logan Bailey

Изменить обновлено 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:listen будет прослушивать очередь и продолжать обрабатывать любые команды очереди, которые он получает. Это будет продолжаться до бесконечности, пока вы не остановите его.

В Laravel> = 4.2 была добавлена ​​команда --daemon. Как это работает, просто продолжает работать с очередями напрямую, а не перезагружать всю инфраструктуру после обработки каждой очереди. Это необязательная команда, которая значительно уменьшает требования к памяти и процессорам вашей очереди.

Важным моментом при использовании команды --daemon является то, что при обновлении приложения необходимо специально перезапустить очередь с помощью queue:restart, в противном случае вы можете получить всевозможные странные ошибки, поскольку в вашей очереди старый код все еще будет храниться в памяти.

Поэтому, чтобы ответить на ваш вопрос " Какую команду использовать для запуска моих демонов? " - ответ почти всегда queue:work --daemon

111
Laurence

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

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

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

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

для запуска его один раз команда,

php artisan queue:work --once

15
Alupotha

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

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

4
Simon Fredsted