AWS SQS重新处理飞行中消息

时间:2018-12-04 12:02:33

标签: .net amazon-web-services .net-core amazon-sqs

我有一个文件读取器,可将CSV的每一行放入SQS;订阅了.Net lambda函数以接收每一行并分别进行处理。

项目完成处理(大约1-3秒)后,将从队列中删除。

处理完一行后,它将数据包发送到系统的另一个区域,但是我在日志中看到的是我们正在从该函数接收重复的数据包。

由于lambda函数同时运行;我的工作原理是,当某个功能可用于消耗另一个项目时,队列项目仍在运行中-因此,它消耗了已被处理的项目。

最后一次执行删除操作时,我的解决方法是将删除操作移至该函数的开头。

但是我担心这是否合理,好像函数在处理过程中挂起或超时一样,我们将完全丢失数据包。另外,如果我从队列中删除该项目;从消息中解析出数据后,该功能将能够继续吗?

所以我的问题分为两部分

  1. 是否有可能将lambda函数订阅到SQS 接收到飞行中的消息,而该消息的另一个实例 函数已经在处理它了?
  2. 是否存在任何潜在问题 我选择功能后就删除队列项目 起来

1 个答案:

答案 0 :(得分:2)

尝试避免这种解决方案。您的函数可能会抛出异常,或者由于5分钟的lambda限制而被杀死,您将丢失消息

相反,我将尝试根据您的函数处理消息(或消息)所需的时间来调整可见性超时。 另一方面,您可以减少侦听器每次阅读的消息数(默认为10条)。 因此,它将减少总的处理时间,并且处理时间将小于可视性超时(或默认情况下为超时) 如果您无法预测需要多少时间来处理邮件,则可以在收到邮件后调整(延长)visibleTimeout。

https://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-visibility-timeout.html