【问题标题】:Amazon SES messages to SNS and SQS optimizationAmazon SES 消息到 SNS 和 SQS 优化
【发布时间】:2017-08-22 17:58:23
【问题描述】:
我正在为一个项目使用 Amazon SES,并设置了一个接收规则以将消息从 SES 发送到 SNS。 SNS 将我的 API 端点作为订阅者,但为了确保我不会错过任何消息,我还设置了一个 SQS 队列并将队列订阅到 SNS 主题。
通过此设置,我每封 SES 电子邮件都会收到两次。 (一个来自 SNS,一个来自 SQS 的投票)。有没有办法只将失败的 SNS 消息发送到 SQS 队列,这样我就不必总是检查重复项?
向 SNS 发送 SES 消息的规则:
订阅 SNS 主题的 SQS 队列:
【问题讨论】:
标签:
amazon-web-services
amazon-s3
amazon-sqs
amazon-sns
【解决方案1】:
根据您的设置,这是不可能的。但是您可以尝试其他方法。它可能会给您的应用程序带来复杂性,但值得一试。下面给出了一些方法。
SES 到 SNS 并将所有消息从 SNS 发送到 SQS,并轮询 SQS 以获取消息。如果有些失败,则将它们放入 Deadletterqueue(类似于 SQS),并不时单独轮询该队列,以查找失败的消息。这使得消息更持久,但由于轮询而效率稍低。
SES 到 SNS 并让 SNS 根据需要使用它的传递策略。您可以避免 SQS,并要求 SNS 查找 投递状态,如果失败则重试。您可以根据需要定义重试策略,它在this link 中给出。经过大量尝试后,该消息可以作为完全失败而被丢弃。您还可以将重试状态写入 AWS CloudWatch Logs。
【解决方案2】:
简短的回答,不。
如果您已将 SQS 队列订阅到 SNS 主题,它将接收发布到后者的所有消息。 SNS 不知道您的 API 成功处理了哪些消息,因此无法选择性地发送到 SQS。