start rails job delayed_job delayed applicationjob active ruby ruby-on-rails-3 ruby-on-rails-3.1 delayed-job

ruby - delayed_job - rails job



Delayed_job-¿Múltiples colas paralelas? (3)

Con bundler en producción:

RAILS_ENV=production bundle exec script/delayed_job -n 4 start

o sin agrupador

ruby script/delayed_job -n 4 start

Estoy usando delayed_job y me mudé a un nuevo servidor más robusto. ¡Ahora me gustaría ejecutar trabajos paralelos, ya que ahora tengo el PODER! , pero estoy confundido sobre si delayed_job puede ejecutar varias colas paralelas?

Esta pregunta sugiere que hay colas con nombre, pero, ¿se ejecutan todas en una sola tabla y, por lo tanto, son secuenciales?

En la parte inferior, @Jesse Wolgamott sugiere que puede crear una tabla para cada cola que luego se ejecutará en paralelo.

¿Alguien ha hecho esto y pueden indicarme cómo se hace?


Es posible y lo estoy haciendo todo el tiempo. En nuestro caso, necesitamos varios trabajos para procesar tres tipos diferentes de trabajos, por ejemplo, queue_a, queue_b y queue_c. El sistema realizará entradas en la tabla delayed_job y la cola nombrada apropiadamente.

Iniciar 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 trabajo retrasado, por lo que ahora habrá 4 trabajos paralelos, dos de ellos sirviendo a queue_a y uno para cada 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 los trabajos según sea necesario.

Otra opción es usar grupos de trabajadores.

RAILS_ENV=production script/delayed_job --pool=tracking --pool=mailers,tasks:2 --pool=*:2 start

Ese comando iniciará 1 trabajador para la cola de seguimiento, 2 trabajadores para los correos y las colas de tareas, y 2 trabajadores para cualquier trabajo.


Si está utilizando tareas de rake como su mecanismo de inicio de trabajo, la variable de entorno QUEUE se puede usar para iniciar diferentes trabajos de trabajador separados por cola.

Ejemplo:

QUEUE=email rake jobs:work QUEUE=build_data rake jobs:work

La variable QUEUES le permite salir de la cola de varias colas de DJ para un trabajador en particular.

QUEUES=build_data,email rake jobs:work

Particularmente útil si está utilizando un entorno alojado / en la nube (por ejemplo, Heroku) que le brinda acceso limitado para iniciar scripts / trabajos directamente.