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