【发布时间】:2020-07-30 10:32:12
【问题描述】:
我需要一个队列来处理延迟 x 小时后的消息。而且我需要一种数据驱动的所有基于事件的方法,不使用任何调度程序等。
场景是我将一些实时数据发送到 SNS 主题,然后从那里发送到不同的 SQS 队列,以供不同的 AWS Lambda 函数使用。
其中一个 Lambda 函数需要在延迟 3 小时后处理消息。但是,最长交货延迟为 15 分钟。如果我第一次阅读该消息,它将自动从 SQS 中删除,因为我正在使用事件源映射触发器来调用 lambda 函数。
所以,我想知道如何避免删除消息并使其在第一次处理时不可见?
任何想法/帮助将不胜感激。
【问题讨论】:
-
第一次阅读后不能删除邮件吗?也许您可以从队列中获取它,将其可见性更改为 3 小时(最长 12 小时)并在 3 小时内再次正确处理它。
-
我一读到它们就会被事件源映射自动删除!
-
@Marcin ,我实际上有这个计划阅读它一次并将它留在那里直到可见性超时达到再次重新处理的阈值。但是,它似乎第一次被删除。我正在寻找一种方法来避免这个删除部分。
-
如果您从 lambda 返回成功,是的,事件源映射将假定消息已成功处理并将其删除。如果您在更改可见性超时后在 lambda 中失败,事件源映射将不会删除该消息。相反,它将重试再次提交。我认为返回 200 以外的状态码会被视为失败?必须检查一下。
-
哦!很高兴知道我认为只有调用失败才会将 msgs 再次返回到队列中......所以我的 lambda 中的任何异常都会对吗?我马上试试。。谢谢
标签: amazon-web-services aws-lambda amazon-sqs data-driven-tests