MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

eseguire solo uno dei tanti lavori duplicati con sidekiq?

Il mio suggerimento iniziale sarebbe un mutex per questo lavoro specifico. Ma poiché c'è la possibilità che tu possa avere più server di applicazioni che svolgono i lavori sidekiq, suggerirei qualcosa a livello di redis.

Ad esempio, usa redis-semaphore all'interno della definizione di lavoratore sidekiq. Un esempio non testato :

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