如何尽快异步发送电子邮件?

时间:2013-06-19 19:34:34

标签: email language-agnostic asynchronous

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

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

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

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

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

我对这个解决方案感到非常满意,除了事实并非如此。人们通常希望在接下来的几秒钟内收到一封邮件(如果是短信则更多)。

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

是否有一些常见的解决方案可以异步处理电子邮件,但是一旦电子邮件发送到队列就开始处理?

1 个答案:

答案 0 :(得分:0)

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