Skip to content

Latest commit

 

History

History
85 lines (65 loc) · 2.21 KB

File metadata and controls

85 lines (65 loc) · 2.21 KB

5- Colas

La mayoría de los adaptadores admiten varias colas. Con Active Job puede programar el trabajo para que se ejecute en una cola específica:

class GuestsCleanupJob < ApplicationJob
  queue_as :low_priority
  #....
end

Puede prefijar el nombre de la cola para todos sus trabajos utilizando config.active_job.queue_name_prefix en application.rb:

# config/application.rb
module YourApp
  class Application < Rails::Application
    config.active_job.queue_name_prefix = Rails.env
  end
end
 
# app/jobs/guests_cleanup_job.rb
class GuestsCleanupJob < ApplicationJob
  queue_as :low_priority
  #....
end
 
# Ahora su trabajo se ejecutará en la fila production_low_priority en su
# entorno de producción y en staging_low_priority
# en su entorno de staging

El delimitador de prefijo de nombre de cola predeterminado es '_'. Esto se puede cambiar configurando config.active_job.queue_name_delimiter en application.rb:

# config/application.rb
module YourApp
  class Application < Rails::Application
    config.active_job.queue_name_prefix = Rails.env
    config.active_job.queue_name_delimiter = '.'
  end
end
 
# app/jobs/guests_cleanup_job.rb
class GuestsCleanupJob < ApplicationJob
  queue_as :low_priority
  #....
end
 
# Ahora su trabajo se ejecutará en la fila production.low_priority en su
# entorno de producción y en staging.low_priority
# en su entorno de staging

Si desea más control sobre en qué cola se ejecutará un trabajo, puede pasar una opción :queue a :#set:

MyJob.set(queue: :another_queue).perform_later(record)

Para controlar la cola desde el nivel del job, puede pasar un bloque a #queue_as. El bloque se ejecutará en el contexto del job (para poder acceder a self.arguments) y debe devolver el nombre de la cola:

class ProcessVideoJob < ApplicationJob
  queue_as do
    video = self.arguments.first
    if video.owner.premium?
      :premium_videojobs
    else
      :videojobs
    end
  end
 
  def perform(video)
    # Do process video
  end
end
 
ProcessVideoJob.perform_later(Video.last)

Asegúrese de que el servidor de cola "escucha" el nombre de su cola. Para algunos backends es necesario especificar las colas para escuchar.