2016-10-19 11 views
2

Я использую Sidekiq debounce, чтобы оценить ограничение количества заданий в таймфрейме. Вот моя работа:Rails: Как добавить Sidekiq :: Дебют в цепочку промежуточного программного обеспечения

class CalculateAllEventRankingsForUser 
    include Sidekiq::Worker 
    sidekiq_options debounce: true 

    def perform(user_id) 
    puts "recalculating all events for user" 
    ## do some work 
    end 

end 

Где я называю работу:

CalculateAllEventRankingsForUser.perform_in(20.seconds, self.id) 

И мой sidekiq инициализатор:

Sidekiq.configure_server do |config| 
    config.client_middleware do |chain| 
    chain.add Sidekiq::Debounce 
    end 
    config.server_middleware do |chain| 
    chain.add Sidekiq::Debounce 
    end 
end 

Вопрос заключается в том, что все мои sidekiq работы все еще обрабатывается, даже если я стреляю несколькими в течение 20 секунд. Мое намерение заключается в том, чтобы увольнять только одну работу каждые 20 секунд (максимум).

Из документов:

Добавить Sidekiq :: DEBOUNCE к вашему клиенту промежуточного слоя цепи, а затем добавить sidekiq_options дребезга: правда работника, который вы хотите дребезг.

Используйте #perform_in вместо #perform_async, чтобы установить таймфрейм.

Главное, что я не уверен в том, как добавить Sidekiq :: Debounce к моей цепочке промежуточного программного обеспечения. Не уверен, что я делаю это правильно.

Любые идеи о том, как разрешить это?

+0

Вы продолжаете задавать тот же вопрос, а не читать предыдущий ответ на свой предыдущий вопрос: http://stackoverflow.com/questions/40119004/rails-sidekiq-confused-about-debounce/40119327? Noredirect = 1 # comment67509958_40119327 –

+0

Эй, @SergeyMoiseev. Я выполнил ваше решение из предыдущего ответа. Это другой вопрос с более конкретными деталями. Я переписал свой код, так что debounce - идеальное решение. Но я не уверен, как добавить Sidekiq :: Debounce в мою цепочку промежуточного программного обеспечения. Сейчас я пытаюсь реализовать sidekiq-debounce, но все мои задания все еще увольняются. –

+0

Какую версию siqekiq вы используете? –

ответ

0

sidekiq-debounce работает с sidekiq 4.2. Причина, по которой это не произошло, скорее всего вызвана тем, как клиентское промежуточное программное обеспечение было настроено в коде, который вы использовали.

Это должно работать:

Sidekiq.configure_server do |config| 
    config.server_middleware do |chain| 
    chain.add Sidekiq::Debounce 
    end 
end 

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