一家图像处理公司有一个Web应用程序,可以将图像上传到Amazon S3存储桶。S3事件通知将对象创建事件发布到Amazon Simple Queue Service (Amazon SQS)标准队列。该SQS队列是AWS Lambda函数的事件源,该函数处理图像并将结果通过电子邮件发送给用户。用户报告说,每次上传图像都会收到多封电子邮件。解决方案架构师发现SQS消息多次调用Lambda函数,导致电子邮件重复。解决方案架构师应该怎么做才能以最少的运维开销解决此问题?
选择一个答案
点击一个选项来检查您的答案。
正确答案: 将SQS队列中的可见性超时设置为大于函数超时和批处理窗口超时之和的值。.
为什么这是答案
正确答案是设置可见性超时。当Lambda函数从SQS队列中读取消息时,这些消息在可见性超时期间对其他消费者是不可见的。如果可见性超时设置得太短,在Lambda函数处理完消息并将其删除之前,消息可能会再次变得可见,导致其他Lambda实例处理相同的消息,从而发送重复的电子邮件。将可见性超时设置为大于函数处理时间和批处理窗口之和,可以确保在Lambda成功处理并删除消息之前,该消息不会被其他实例再次处理。 增加ReceiveMessage等待时间(长轮询)会减少空响应,但不会解决重复处理的问题。将标准队列更改为FIFO队列并使用消息去重ID可以解决重复问题,但会增加额外的成本和复杂性,并且可能不是最少运维开销的解决方案,因为标准队列在许多情况下已经足够。修改Lambda函数在处理前立即删除消息是错误的,因为如果处理失败,消息将丢失,无法重试。
通过考试 — 无需无休止地寻找答案
将本次考试的所有验证问题和解释集中在一处,节省数小时的准备时间。1,000+ 认证 · 20+ 语言 · 免费开始。
更快通过考试 → 无需银行卡