我在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
谢谢
答案 0 :(得分:0)
这是一个很好用的模式。像这样:
email.begin_transmission!
email.mark_as_sent!
可能出现的唯一问题是,如果您的数据库在发送电子邮件之后但在可以标记为已发送之前死亡。在这种情况下,您可以获得双倍交付,但这应该非常罕见。