MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

executar apenas um dos muitos trabalhos duplicados com sidekiq?


Minha sugestão inicial seria um mutex para este trabalho específico. Mas como há uma chance de você ter vários servidores de aplicativos trabalhando nos trabalhos do sidekiq, sugiro algo no nível do redis.

Por exemplo, use redis-semaphore dentro da sua definição de trabalhador sidekiq. Um exemplo não testado :
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