Sidekiq: Ensure all jobs on the queue are unique

前端 未结 4 759
醉话见心
醉话见心 2020-12-13 22:24

I have some update triggers which push jobs onto the Sidekiq queue. So in some cases, there can be multiple jobs to process the same object.

There are a couple of un

4条回答
  •  一整个雨季
    2020-12-13 23:31

    What about a simple client middleware?

    module Sidekiq
      class UniqueMiddleware
    
        def call(worker_class, msg, queue_name, redis_pool)
          if msg["unique"]
            queue = Sidekiq::Queue.new(queue_name)
            queue.each do |job|
              if job.klass == msg['class'] && job.args == msg['args']
                return false
              end
            end
          end
    
          yield
    
        end
      end
    end
    

    Just register it

      Sidekiq.configure_client do |config|
        config.client_middleware do |chain|
          chain.add Sidekiq::UniqueMiddleware
        end
      end
    

    Then in your job just set unique: true in sidekiq_options when needed

提交回复
热议问题