Sidekiq 工人模式

Sidekiq Worker Pattern

我在 RoR 应用程序上安装了 Sidekiq 和 运行。一切都很好,工作正在排队。

就排队作业而言,我已经看到了很多模式,但我对我在生产中看到的这种模式感到好奇并且效果很好。它是幂等的,可以与多个 Sidekiq worker 一起工作,并且 generate 方法有神奇的作用....

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

class MailerDeamon 包括 Sidekiq::Worker

  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

谢谢

这个模式很好用。像这样:

email.begin_transmission!
email.mark_as_sent!

唯一可能发生的问题是,如果您的数据库在电子邮件发送后但在标记为已发送之前就死机了。那样的话,可以双送,不过这种情况应该是非常少见的。