我刚刚阅读了这篇excellent question关于异步发送电子邮件与同步发送电子邮件的优势。
我完全同意单一答案的结论,即:将电子邮件存储在队列中,并尽快将页面返回给用户。
我当前的实现使用数据库表来存储电子邮件队列。这种方法有几个优点:
然后我实现了一个永久运行的作业,并且如果有一些邮件要发送,将定期检查(目前是30秒)。并且处理它们。
我对这个解决方案感到非常满意,除了事实并非如此。人们通常希望在接下来的几秒钟内收到一封邮件(如果是短信则更多)。
我显然可以在两次运行之间暂停不超过一秒的工作,但我不想在频繁的事务中不必要地浪费服务器资源。此外,因为我的电子邮件是通过API调用发送的,所以我会从并发处理中受益,而我当前的实现并没有这样做(它按顺序处理它们)。
是否有一些常见的解决方案可以异步处理电子邮件,但是一旦电子邮件发送到队列就开始处理?
答案 0 :(得分:0)
当您将电子邮件发送到数据库时,您还会向电子邮件发送作业发送通知以将其唤醒并发送新电子邮件。它不是等待发送作业检查,而是立即通知并立即处理新电子邮件。