我有一个用例,我需要Amazon SNS发送通知,直到我的应用程序(让我们称之为APP)成功收到它,但文档说消息的最长生命周期可能是1小时.
让我们说APP崩溃了,并且不可能在1小时内让它生效.我仍然需要以某种方式接收这些消息.
有多种方法可以实现它:
APP从SQS进行民意调查.我不喜欢这个选项,因为它在APP和AWS之间产生了太多的网络流量.
SNS向两者发送通知:APP和SQS.如果APP能够接收消息,它将立即从SQS中删除它.如果APP无法接收消息(崩溃),它可以在启动时从SQS加载消息并清理队列.
AWS Lambda代码作为消息传递服务.如果Lambda代码失败,它可以将消息推送到SQS死信队列,否则保持队列清洁.处理Lamba代码更新的开销太大,如果可能的话,使用纯AWS解决此问题会很酷.
完美的解决方案是为SNS消息设置无限超时,但看起来亚马逊不支持它.
您认为解决此问题的最佳解决方案是什么?我错过了什么吗?
一种选择可能是让SNS将消息传递给调用您的应用程序的Lambda.如果Lambda无法将消息传递到您的应用程序,则会失败,以便SNS将重试Lambda.然后,您可以使用死信队列(SQS)配置Lambda,以便在失败次数过多时,消息将进入队列.最后,您可以按计划运行另一个Lambda,该计划检查死信队列并重试Lambda调用.如果失败,它会继续将消息放回到死信队列中.
这样,如果您的应用程序可用,则会立即传递消息.如果该应用程序不可用,那么它将在稍后重试交付.