首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails & Sidekiq:对De弹感到困惑

Rails & Sidekiq:对De弹感到困惑
EN

Stack Overflow用户
提问于 2016-10-18 22:17:26
回答 1查看 776关注 0票数 1

我正在构建一个Tinder风格的应用程序,用户可以在其中滑动事件。

目前,我有一个后台作业,在用户任何时候都会被触发。随着用户每分钟浏览20个事件,我创造了大量的后台工作:

worker.rb

代码语言:javascript
复制
class Worker
  include Sidekiq::Worker

  def perform(user_id, newly_voted_event_id)
    user = User.find(user_id)
    event = Event.find(newly_voted_event_id)
    events_to_rerank = event.similar.unvoted(user_id)
    events_to_rerank.each do |e|
      e.rank(user_id)
    end
  end    
end

user.rb:

代码语言:javascript
复制
def recalculate_similar_events(event_id)
  CalculateRelevantEventRankingsForUser.perform_async(self.id, event_id)
end

我想做的是每个用户每5分钟最多运行一次后台作业。因此,我将使用sidekiq-debounce将我的后台工作更改为:

代码语言:javascript
复制
def recalculate_similar_events(event_id)
  CalculateRelevantEventRankingsForUser.perform_in(5.minutes, self.id, event_id)
end

我对宝石的作用很困惑。它是在5分钟内作为一个作业自动执行所有作业,还是只在每5分钟窗口中执行第一个作业?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-10-18 22:47:44

像往常一样,在这样的问题中,如果你不确定最简单的解决方法是查看gem代码

代码语言:javascript
复制
    # Reschedule the old job to when this new job is scheduled for
    # Or yield if there isn't one scheduled yet
    jid = scheduled_jid ? reschedule(scheduled_jid, @msg['at']) : yield

因此,如果当您调用另一个运行时,一个作业已经在这里了,那么它将在5分钟后重新安排。

更新:从您正在寻找侧限幅器的评论中可以看出,并没有被攻破。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40119004

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档