Cuál es la diferencia entre queue: work –daemon y queue: listen

Estoy configurando mi servidor de trabajo fuera de línea. He leído la documentación pero todavía no veo las diferencias entre los dos comandos: artisan queue:work --daemon y artisan queue:listen . ¿Qué comando debo usar para ejecutar mis daemons?

Editar actualizado 2017-04-07:

Ahora hay tres formas de ejecutar su cola:

  • queue:work – este es el nuevo proceso “daemon” (la bandera ya no es necesaria). El marco se activará “una vez” y luego continuará recorriendo los trabajos. Esto continuará indefinidamente. Utiliza menos memoria / CPU que queue:listen porque el marco se mantiene activo todo el tiempo. También debe recordar usar queue:restart para forzar a la cola a actualizar cualquier cambio de código que presione durante la aplicación de parches.

  • queue:work --once – esto activará el marco, procesará un trabajo y luego se apagará. Útil para probar durante el desarrollo, etc.

  • queue:listen – esto activará el framework en cada ciclo, procesará un trabajo, luego se apagará por completo, y luego volverá a encender el framework, etc. y repetirá indefinidamente. Esto significa que todas las memorias / procesos se liberan después de que se procesa cada trabajo. Si tiene pérdidas de memoria con la queue:work , pruébelo.

La bandera --daemon ya no tiene un efecto en estos comandos.

Respuesta original:

Hay dos problemas diferentes en la lista.

Hay artisan queue:work y artisan queue:listen

  • queue:work simplemente saltará del siguiente trabajo en la cola y procesará solo ese trabajo. Este es un comando “único” que regresará al símbolo del sistema una vez que se procesa el comando de una cola.
  • queue:listen escuchará la cola y continuará procesando los comandos de cola que reciba. Esto continuará ejecutándose indefinidamente hasta que lo detenga.

En Laravel> = 4.2 había un comando --daemon agregado. La forma en que funciona es simplemente ejecutar las colas directamente, en lugar de reiniciar todo el marco después de procesar cada cola. Este es un comando opcional que reduce significativamente los requisitos de memoria y CPU de su cola.

El punto importante con el comando --daemon es que cuando actualice su aplicación, debe reiniciar específicamente su cola con queue:restart ; de lo contrario, podría obtener todo tipo de errores extraños, ya que su cola aún conservaría el código anterior en la memoria .

Entonces, para responder a su pregunta ” ¿Qué comando debo usar para ejecutar mis daemons? ” – la respuesta casi siempre es queue:work --daemon

Las cosas han cambiado pero no fueron mencionadas en el documento

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

ahora por defecto php artisan queue:work ejecuta en modo daemon,

Así que queue:work continúa procesando trabajos sin tener que reiniciar el marco

para ejecutarlo una vez que el comando es,

php artisan queue:work --once

La diferencia más importante es que queue:work --daemon no reinicia el framework en cada trabajo , sino queue:listen does . De hecho, listen comienza un nuevo proceso de Laravel para cada trabajo.

Pruébelo usted mismo: abra 2 terminales y ejecute work --daemon en uno y listen en el otro. La ventana de work ejecutará trabajos mucho más rápido que listen .