Sidekiq工人模式

时间:2016-08-22 17:53:34

标签: ruby sidekiq

我在SideR上启动并运行RoR应用程序。一切都很好,工作排队等候。

就排队工作而言,我已经看到了很多模式,但我对这种模式感到好奇,我在生产中看到并运作良好。它是幂等的,可以与多个Sidekiq工作者一起工作,而generate方法可以起到魔力......

关于这是否是一个好的模式使用的任何意见......?

类MailerDeamon       包括Sidekiq ::工人

  def perform(id)
    # idempotent 
    email = Email::Message.find_by(id: id)
    return unless email
    return unless email.sent? # or something that marks it has been sent

    email.begin_transmission!
  end

  def self.generate
    Email::Message.triggered(60).ids.each do |id|
      perform_async(id)
    end
  end
end

谢谢

1 个答案:

答案 0 :(得分:0)

这是一个很好用的模式。像这样:

email.begin_transmission!
email.mark_as_sent!

可能出现的唯一问题是,如果您的数据库在发送电子邮件之后但在可以标记为已发送之前死亡。在这种情况下,您可以获得双倍交付,但这应该非常罕见。