使用 SQS 模拟 SNS 中的消息持久化
Simulating message persistence in SNS using SQS
我们正在评估 SNS 是否符合我们的消息传递要求,以集成多个应用程序。我们有一个生产者将消息发布到 SNS 上的多个主题。每个主题有 2-5 个订阅者。如果订户出现故障(停机维护),我对每个消费者使用 SQS 队列的推荐策略有几个问题
- 是否可以将 SNS 配置为仅在向订阅者发送消息失败时才推送到 SQS?转储 SQS 队列中的所有消息会给消费者在重新启动时分析队列中的所有消息带来问题。
- 如果订阅者出现故障,它可以在重新启动时从 SQS 队列中读取消息,但它如何知道它在过载时错过了来自 SNS 的消息?
欢迎就处理订户故障提出任何建议。
谢谢!
不,不可能"configure SNS to push to SQS only in event of failure"。
您可以配置 Amazon SNS 重试策略。
而不是尝试在失败后恢复消息
来自Setting Amazon SNS Delivery Retry Policies for HTTP/HTTPS Endpoints:
You can use delivery policies to control not only the total number of retries, but also the time delay between each retry. You can specify up to 100 total retries distributed among four discrete phases. The maximum lifetime of a message in the system is one hour. This one hour limit cannot be extended by a delivery policy.
因此,只要目的地在一小时内恢复在线,您就无需担心。
如果它可能离线超过一个小时,您将需要找到一种方法来存储和 "replay" 消息,可能通过检查 CloudWatch Logs.
或者,这是另一个想法...
最初推送到 SQS。具有由 SQS 触发的 AWS Lambda 函数。 Lambda 函数可以执行通常由 SNS 执行的 'push'。如果失败,则标准 SQS 隐形进程将稍后重试,最终进入死信队列。
我们正在评估 SNS 是否符合我们的消息传递要求,以集成多个应用程序。我们有一个生产者将消息发布到 SNS 上的多个主题。每个主题有 2-5 个订阅者。如果订户出现故障(停机维护),我对每个消费者使用 SQS 队列的推荐策略有几个问题
- 是否可以将 SNS 配置为仅在向订阅者发送消息失败时才推送到 SQS?转储 SQS 队列中的所有消息会给消费者在重新启动时分析队列中的所有消息带来问题。
- 如果订阅者出现故障,它可以在重新启动时从 SQS 队列中读取消息,但它如何知道它在过载时错过了来自 SNS 的消息?
欢迎就处理订户故障提出任何建议。
谢谢!
不,不可能"configure SNS to push to SQS only in event of failure"。
您可以配置 Amazon SNS 重试策略。
而不是尝试在失败后恢复消息来自Setting Amazon SNS Delivery Retry Policies for HTTP/HTTPS Endpoints:
You can use delivery policies to control not only the total number of retries, but also the time delay between each retry. You can specify up to 100 total retries distributed among four discrete phases. The maximum lifetime of a message in the system is one hour. This one hour limit cannot be extended by a delivery policy.
因此,只要目的地在一小时内恢复在线,您就无需担心。
如果它可能离线超过一个小时,您将需要找到一种方法来存储和 "replay" 消息,可能通过检查 CloudWatch Logs.
或者,这是另一个想法...
最初推送到 SQS。具有由 SQS 触发的 AWS Lambda 函数。 Lambda 函数可以执行通常由 SNS 执行的 'push'。如果失败,则标准 SQS 隐形进程将稍后重试,最终进入死信队列。