在Sidekiq中使用`delay`和动态类/方法名称

时间:2018-02-21 02:27:05

标签: actionmailer sidekiq

假设我有一些内部业务逻辑来确定需要发送的邮件程序。

此业务逻辑的输出是以下格式的哈希 -

header("Location: login.php?msg=You have entered the Login details incorrectly");
//echo "Error:";

我需要根据上面的信息调用相应的邮件程序,所以我尝试使用Sidekiq内置的{ mailer_class: SomeMailer, mailer_method: "foo_email" } { mailer_class: OtherMailer, mailer_method: "bar_email" } # etc... -

delay

这导致Sidekiq排队data = { mailer_class: ..., mailer_method: "..." } data[:mailer_class].delay.send(mailer[:method]) 方法,最终将在我的邮件程序中调用。

在功能上它可能正常工作,因为该类毕竟会收到适当的方法。但它感觉有点脏,它会中断观察sidekiq队列的其他进程,因为他们希望看到邮件程序方法名称而是找到send

有没有一个很好的解决方法或我是否坚持修改我的应用程序逻辑的其余部分来处理这个问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

为什么不将Hash传递给知道如何使用该类/方法组合发送电子邮件的Sidekiq Worker呢?

def perform(hash)
  hash['mailer_class'].constantize.send(hash['mailer_method'])
end