【发布时间】:2013-06-20 04:54:22
【问题描述】:
我刚刚阅读了这篇excellent question,了解异步发送电子邮件与同步发送电子邮件的优势。
我完全同意单一答案得出的结论,即:将要发送的电子邮件存储在队列中,并尽快将页面返回给用户。
我当前的实现使用数据库表来存储电子邮件队列。这种方法有几个优点:
- 速度非常快:将记录保存到表中不需要任何时间,而不是进行 API 调用(电子邮件通过 Amazon SES 发送)。
- 这是事务性的:如果出现任何问题,事务将回滚,并且我的电子邮件将永远不会发送给不会提交到数据库的帐户。
然后我实现了一个永久运行的作业,并且会定期(目前是 30 秒)检查是否有一些邮件要发送,并处理它们。
我对这个解决方案很满意,除了它不是即时的。人们通常希望在接下来的几秒钟内收到一封邮件(如果是 SMS 则更多)。
我显然可以让作业在两次运行之间暂停不超过一秒,但我不想因为频繁的事务而不必要地浪费服务器资源。此外,由于我的电子邮件是通过 API 调用发送的,我将从并发处理中受益,而我当前的实现不这样做(它按顺序处理它们)。
是否有一些常见的解决方案仍然异步处理电子邮件,但在电子邮件发送到队列后立即开始处理?
【问题讨论】:
标签: email language-agnostic asynchronous