我有一个Web应用程序,应该在应用程序发生某些事情时向管理员用户发送电子邮件。例如,注册了一个新用户。
我想避免在应用程序内部构建/发送电子邮件的逻辑。我宁愿让应用程序在队列中发布消息,然后,还有另一个系统正在监听并正确反应以发送电子邮件。
流程就是这样的。
我不确定这是否是最佳方式。我读过SQS和Lambda之间存在差距。 SNS会更好吗?
适当的流量是什么?
App - > SQS - > Lambda - > SES
或
App - > SNS - > Lambda - > SES
也许别的什么?
请注意,这个想法始终是从所有逻辑中抽象出Web应用程序。 Web应用程序只会在某处发布消息。然后神奇的事情发生在后台。
答案 0 :(得分:2)
根据您的描述,我建议采用以下架构:
App -> SQS -> Lambda -> SES
我使用SNS
只是从应用程序执行Lambda
函数,或者使用Cron作为队列中的worker定期运行它。 SNS
只是不保留邮件的pub / sub服务。您也可以使用SQS
发布Lambda
。
此体系结构将App与邮件服务分离,提供异步调用和排队。如果您需要发送更大的有效负载,请使用S3
存储这些对象,然后将SQS
条消息中的密钥传递给Lambda
。
答案 1 :(得分:1)
将SNS排除在电子邮件的等式之外,因为您需要成为接收通知主题的订阅者。它真的适用于AWS相关事件通知。
使用SQS,您必须处理Limits Related to Messages。默认的最大邮件大小为256kb,除非您使用特殊的SDK,然后它是2GB。
考虑第三种选择。应用 - > DB - > Lambda - > SES
数据库中的邮件队列是一种简单的表结构,您可以在计划或事件驱动的基础上对其进行Lambda扫描,并通过SES处理邮件。这样就没有SQS消息限制。