MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

nur einen von vielen doppelten Jobs mit sidekiq ausführen?

Mein erster Vorschlag wäre ein Mutex für diesen speziellen Job. Aber da die Möglichkeit besteht, dass Sie mehrere Anwendungsserver haben, die die Sidekiq-Jobs bearbeiten, würde ich etwas auf Redis-Ebene vorschlagen.

Verwenden Sie beispielsweise redis-semaphore innerhalb Ihrer Sidekiq-Worker-Definition. Ein ungetestetes Beispiel :

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