构建用于提醒电子邮件的系统

时间:2015-08-19 04:18:28

标签: ruby-on-rails email cron delayed-job

我正在Rails 4.2中构建预订系统,我需要以预定义的时间间隔向用户发送一组电子邮件(例如,他们有即将到来的预订,完成后的反馈,更改/取消现有的链接预订等)。我环顾四周找到了thisthis,但我正在尝试在各种方法之间做出决定。

我看到了构建这个系统的两种主要方式。

  1. 使用delayed_job之类的队列系统。无论何时有人进行预订,我们都会将所有电子邮件排队,并将其发送到正确的时间。

    Pro:所有电子邮件的一个队列。自动重试逻辑。

    Con:成千上万的电子邮件最终将在系统中排队。每当有人取消预订时需要出队(依赖:销毁与之相关的电子邮件可能非常简单)。我们需要将电子邮件发送出去的时间稍微复杂一些。

  2. cron + rake任务以某个预定义的间隔运行(每小时?每15分钟?)并检查需要外出的电子邮件。它运行一个查询,如“查找三天后的所有预订”,然后发送所有电子邮件。

    Pro:将所有内容放入应用程序逻辑中,减少我们需要跟踪的状态量。

    Con:需要跟踪已发送的电子邮件,这在概念上类似于我们上面创建的任何工作表。

2 个答案:

答案 0 :(得分:0)

第二种方法更好(如果在heroku上使用heroku调度程序),队列更多用于“尽快运行”而不是“在此特定日期时间运行”

答案 1 :(得分:0)

1)使用delayed_job(或Sidekiq)的一个好处是,您可以动态地从站点更新作业(或定期作业)的计划。

您可以在站点中提供一个页面来更新定期作业。现在,delayed_job默认情况下不会真正允许重复作业。虽然有delayed_job_recurringsidekiq-scheduler,但有些附加宝石可能很有用。如果计算能力不是问题,我总是更喜欢实际的工作处理器而不是cron,因为它对我来说更易于管理。