Es posible y lo estoy haciendo todo el tiempo. En nuestro caso, necesitamos múltiples trabajos para procesar tres tipos de trabajos diferentes, por ejemplo queue_a, queue_b y queue_c. El sistema hará las entradas en la tabla de retraso de trabajo y la cola nombrada apropiadamente.
Start varios trabajos retrasados como
RAILS_ENV=production script/delayed_job -i first --queue=queue_a start
RAILS_ENV=production script/delayed_job -i second --queue=queue_a start
RAILS_ENV=production script/delayed_job -i third --queue=queue_b start
RAILS_ENV=production script/delayed_job -i fourth --queue=queue_c start
Cada comando creará un delayed_job, por lo que habrá ahora 4 trabajos paralelos, dos de ellos que sirven queue_a y uno cada uno para queue_b y queue_c. La clave aquí es el identificador que se pasa a través de la opción -i
que especifica el nombre de la instancia, y podemos iniciar y detener trabajos según sea necesario.
Otra opción es usar pools de trabajadores.
RAILS_ENV=production script/delayed_job --pool=tracking --pool=mailers,tasks:2 --pool=*:2 start
ese comando se iniciará 1 trabajador para la cola de seguimiento, 2 trabajadores para los anuncios publicitarios y tareas colas y 2 trabajadores para cualquier trabajo.
No, los trabajadores múltiples trabajan en paralelo, no de forma secuencial. Incluso si las colas están todas en una tabla, los trabajadores utilizarán la consulta sql para seleccionar las tareas en cola a las que están asignadas, ordenadas por 'run_at',' priority'. Por lo tanto, varios trabajadores pueden trabajar en diferentes partes de esa tabla en paralelo. – lulalala
Olvidé la respuesta, así que agregué lo que uso y lo acepté. También volví a subir el otro ... – slotishtype