Rails:如何将Sidekiq :: Debounce添加到我的中间件链

时间:2016-10-19 19:15:58

标签: ruby-on-rails sidekiq debouncing

我正在使用Sidekiq debounce来限制时间范围内的作业数量。这是我的工作:

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 debounce:对你想要去抖的工人都是真的。

     

使用#perform_in而不是#perform_async来设置时间范围。

我不确定的主要问题是如何将Sidekiq :: Debounce添加到我的中间件链中。不确定我是否正确。

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分: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