【问题标题】:Design Pattern for send email application running periodically?定期运行的发送电子邮件应用程序的设计模式?
【发布时间】:2018-01-10 23:16:54
【问题描述】:

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

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

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

这曾经运行良好,但几乎没有陷阱:

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

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

我应该如何继续设计一个强大的系统来保证所有电子邮件都被发送?

如果重要的话,我正在使用 Django 和 linux 机器。

【问题讨论】:

  • 你看过celery吗?他们有一个periodic tasks
  • @ClaudioSantos 还是会和 crons no 有同样的问题?
  • 主要区别在于任务将由任务队列管理,因此您知道哪个任务失败了。 Task retry
  • 如何将“at”与 cron.daily 集成?所以把所有设置放在一个配置文件中,然后从 cron.daily 操作批处理作业队列。

标签: linux django cron scheduled-tasks


【解决方案1】:

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

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

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

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

使用 celery,您可以让一台轻型机器运行 redis,称为 broker,另一台运行您的任务,称为 worker。

看看first steps,Celery 就是你的冠军!!!

【讨论】:

    猜你喜欢
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2011-08-26
    • 2010-12-02
    • 1970-01-01
    • 1970-01-01
    • 2010-12-20
    • 2014-01-14
    相关资源
    最近更新 更多