Procesamiento de trabajos y eventos de Laravel en el mismo trabajador de la cola
Estoy tratando de ejecutar un proceso intensivo en tiempo en mi cola de trabajos. Tengo un evento que se dispara y envía un comando de socket a los usuarios conectados, y luego tengo un trabajo que se encola después y se ejecuta en segundo plano. Hasta ahora, nunca he ejecutado php artisan queue:work
y mi sistema de eventos funcionaba perfectamente. Ahora estoy tratando de procesar mis trabajos y mis eventos Y trabajos están tratando de ser procesados por el mismo trabajador de cola.
Aquí está el código que uso para dispararlos:
event(new ActivateItemAndUpdateRotation($id));
ChangeStatus::dispatch($id, $status);
Esto realmente afecta negativamente mi rendimiento porque los usuarios pueden cambiar los estados muy rápidamente, lo cual debe actualizarse rápidamente, y los trabajos pueden hacer su trabajo en segundo plano a medida que puedan. He intentado agregar los trabajos a una cola específica y solo ejecutar ese trabajador de cola, pero los eventos no se procesan en absoluto. Entonces realmente tengo dos preguntas:
1) ¿Cómo se han estado procesando los eventos sin ejecutar un trabajador hasta ahora?
2) ¿Es necesario tener dos trabajadores ejecutándose ahora para procesar los eventos y los trabajos de forma asíncrona?
davy.ai
Ejecución de un proceso intensivo en tiempo en la cola de trabajos
Problema
El usuario está experimentando problemas de rendimiento al ejecutar un proceso intensivo en tiempo en la cola de trabajos. Ha estado activando un evento que envía un comando de socket a los usuarios conectados y luego coloca un trabajo en la cola para su procesamiento. Sin embargo, los eventos y los trabajos se están procesando mediante el mismo trabajador de la cola, lo que está provocando una disminución en el rendimiento.
Solución
El usuario puede agregar los trabajos a una cola específica y ejecutar solo ese trabajador de la cola por separado de los eventos. Esto permitirá que los trabajos se procesen en segundo plano mientras los eventos se procesan de inmediato.
Para agregar una cola específica al trabajo, el usuario puede agregar la propiedad
$queue
a la clase del trabajo de la siguiente manera:Luego, para ejecutar únicamente el trabajador de la cola de trabajos, el usuario puede utilizar este comando:
En cuanto a las preguntas del usuario:
1) No está claro cómo se han estado procesando los eventos sin ejecutar un trabajador hasta ahora. Es posible que los trabajos en cola se estuvieran procesando de otra manera, como mediante otro trabajador de cola o un trabajo programado.
2) Sí, ahora es necesario tener dos trabajadores ejecutándose para procesar los eventos y los trabajos de forma asíncrona, ya que tienen diferentes requisitos de procesamiento.