发送电子邮件应用程序的设计模式定期运

时间:2017-08-03 11:20:23

标签: linux django cron scheduled-tasks

我正在开发一项功能,允许用户配置要在他选择的时间发送的电子邮件。 用户保存配置后,将在配置的时间每天发送一封电子邮件,直到他停用或删除该配置。可以有许多不同时间的配置。

到目前为止,我正在做这样的事情:

  • 每10分钟运行一次cron作业。
  • 查找要在(现在 - 10分钟)内执行的电子邮件配置。
  • 发送这些电子邮件并更新状态日志。

这曾经很好地工作但很少有陷阱:

有时候不会发送在交叉时间(如02:00)配置的电子邮件。由于部署或高CPU使用率,cron根本没有运行。

在这两种情况下,错过的电子邮件都不会在接下来的24小时内再次被选中。

我应该如何设计一个可以保证发送所有电子邮件的强大系统?

如果重要的是我使用Django和Linux机器。

1 个答案:

答案 0 :(得分:0)

解决方案的下一步是控制谁失败,但你要重新发明轮子

因此,您的问题有一个名为Task Queue的解决方案模式。它是一个管理任务生命周期的应用程序,允许您:

  • 跟踪正在运行或失败的任务;
  • 重试任务;
  • 管理优先事项;
  • 管理执行流程;
  • 为每个主题创建不同的队列;

通过任务队列,您可以将管理任务的应用程序与执行这些任务的应用程序分开。

使用celery你可以有一台运行redis的轻型机器叫做broker,另一台运行你的任务叫做worker。

看看first steps,Celery将成为你的冠军!!!