AWS SNS消息生命周期

6
我有一个需求,需要Amazon SNS发送通知,直到我的应用程序(称为APP)成功收到它,但文档中说消息的最长生存期只能为1小时。
比方说APP崩溃了,并且在1小时内无法恢复。我仍然需要某种方式接收这些消息。
有多种实现方式:
1. APP从SQS轮询。我不喜欢这个选项,因为它会在APP和AWS之间产生太多网络流量。 2. SNS向APP和SQS都发送通知。如果APP能够接收到消息,它将立即从SQS中删除它。如果APP无法接收消息(崩溃),则可以在启动时从SQS加载消息并清除队列。 3. AWS Lambda代码作为消息服务。如果Lambda代码失败,则可以将消息推送到SQS死信队列,否则保持队列清洁。处理Lamba代码更新是太大的负担,如果可能的话,使用纯AWS解决此问题会很酷。
完美的解决方案将是为SNS消息设置无限超时,但看起来Amazon不支持它。
你认为哪种方法是解决这个问题的最佳方法?我有遗漏什么吗?

如果你希望依靠非 AWS 的解决方案,你可以使用带有消息历史记录(保留)插件的 PubNub。 - hjpotter92
感谢hjpotter92。由于这是高度安全的解决方案,我更喜欢不将任何数据发送给除亚马逊以外的第三方。 - Madis Pukkonen
这个有更新了吗? - Chamin Wickramarathna
2个回答

6
一种方法是让SNS将消息传递给调用应用程序的Lambda。如果Lambda无法将消息传递给应用程序,则会失败,以便SNS重试Lambda。然后,您可以使用死信队列(SQS)配置Lambda,以便如果Lambda失败过多次,则消息将进入队列。最后,您可以有另一个按计划运行的Lambda,检查死信队列并重试Lambda调用。如果失败,它只会将消息放回死信队列。
通过这种方式,如果应用程序可用,则立即传递消息。如果应用程序不可用,则稍后重试传递。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接