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