我正在使用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添加到我的中间件链中。不确定我是否正确。
有关如何解决此问题的任何想法?
答案 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