我有一个文件读取器,可将CSV的每一行放入SQS;订阅了.Net lambda函数以接收每一行并分别进行处理。
项目完成处理(大约1-3秒)后,将从队列中删除。
处理完一行后,它将数据包发送到系统的另一个区域,但是我在日志中看到的是我们正在从该函数接收重复的数据包。
由于lambda函数同时运行;我的工作原理是,当某个功能可用于消耗另一个项目时,队列项目仍在运行中-因此,它消耗了已被处理的项目。
最后一次执行删除操作时,我的解决方法是将删除操作移至该函数的开头。
但是我担心这是否合理,好像函数在处理过程中挂起或超时一样,我们将完全丢失数据包。另外,如果我从队列中删除该项目;从消息中解析出数据后,该功能将能够继续吗?
所以我的问题分为两部分
答案 0 :(得分:2)
尝试避免这种解决方案。您的函数可能会抛出异常,或者由于5分钟的lambda限制而被杀死,您将丢失消息
相反,我将尝试根据您的函数处理消息(或消息)所需的时间来调整可见性超时。 另一方面,您可以减少侦听器每次阅读的消息数(默认为10条)。 因此,它将减少总的处理时间,并且处理时间将小于可视性超时(或默认情况下为超时) 如果您无法预测需要多少时间来处理邮件,则可以在收到邮件后调整(延长)visibleTimeout。