sql >> Base de Datos >  >> NoSQL >> MongoDB

ejecutar solo uno de los muchos trabajos duplicados con sidekiq?

Mi sugerencia inicial sería un mutex para este trabajo específico. Pero como existe la posibilidad de que tenga varios servidores de aplicaciones trabajando en los trabajos de sidekiq, sugeriría algo en el nivel de redis.

Por ejemplo, use redis-semaphore dentro de su definición de trabajador sidekiq. Un ejemplo no probado :

def perform
  s = Redis::Semaphore.new(:map_reduce_semaphore, connection: "localhost")

  # verify that this sidekiq worker is the first to reach this semaphore.
  unless s.locked?

    # auto-unlocks in 90 seconds. set to what is reasonable for your worker.
    s.lock(90)
    your_map_reduce()
    s.unlock
  end
end

def your_map_reduce
  # ...
end