【问题标题】:How to send email asynchronously but as soon as possible?如何尽快异步发送电子邮件?
【发布时间】:2013-06-20 04:54:22
【问题描述】:

我刚刚阅读了这篇excellent question,了解异步发送电子邮件与同步发送电子邮件的优势。

我完全同意单一答案得出的结论,即:将要发送的电子邮件存储在队列中,并尽快将页面返回给用户。

我当前的实现使用数据库表来存储电子邮件队列。这种方法有几个优点:

  • 速度非常快:将记录保存到表中不需要任何时间,而不是进行 API 调用(电子邮件通过 Amazon SES 发送)。
  • 这是事务性的:如果出现任何问题,事务将回滚,并且我的电子邮件将永远不会发送给不会提交到数据库的帐户。

然后我实现了一个永久运行的作业,并且会定期(目前是 30 秒)检查是否有一些邮件要发送,并处理它们。

我对这个解决方案很满意,除了它不是即时的。人们通常希望在接下来的几秒钟内收到一封邮件(如果是 SMS 则更多)。

我显然可以让作业在两次运行之间暂停不超过一秒,但我不想因为频繁的事务而不必要地浪费服务器资源。此外,由于我的电子邮件是通过 API 调用发送的,我将从并发处理中受益,而我当前的实现不这样做(它按顺序处理它们)。

是否有一些常见的解决方案仍然异步处理电子邮件,但在电子邮件发送到队列后立即开始处理?

【问题讨论】:

    标签: email language-agnostic asynchronous


    【解决方案1】:

    当您将电子邮件放入数据库时​​,您还会向电子邮件发送作业发送通知以唤醒它并发送新电子邮件。它不是等待发送作业检查,而是主动通知并立即处理新电子邮件。

    【讨论】:

    • 虽然它们在不同的机器上,是否有某种标准化的通知系统?
    • 通过。这在很大程度上取决于您在两台机器上运行的内容。原则上,应该可以在机器之间传递消息。不过,细节可能会有些复杂,具体取决于。
    猜你喜欢
    • 1970-01-01
    • 2011-05-06
    • 2011-05-25
    • 2017-07-13
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多