使用SQS或SNS发送电子邮件

时间:2016-06-28 16:34:50

标签: amazon-web-services amazon-sqs amazon-sns amazon-ses aws-lambda

我有一个Web应用程序,应该在应用程序发生某些事情时向管理员用户发送电子邮件。例如,注册了一个新用户。

我想避免在应用程序内部构建/发送电子邮件的逻辑。我宁愿让应用程序在队列中发布消息,然后,还有另一个系统正在监听并正确反应以发送电子邮件。

流程就是这样的。

  • 应用程序在队列中发布消息(SQS或SNS ??)
  • lambda函数是触发器。 Lambda读取消息并调用SES。
  • SES发送电子邮件

我不确定这是否是最佳方式。我读过SQS和Lambda之间存在差距。 SNS会更好吗?

适当的流量是什么?

App - > SQS - > Lambda - > SES

App - > SNS - > Lambda - > SES

也许别的什么?

请注意,这个想法始终是从所有逻辑中抽象出Web应用程序。 Web应用程序只会在某处发布消息。然后神奇的事情发生在后台。

2 个答案:

答案 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消息限制。