一位开发人员构建了一个微服务,该服务使用 AWS Lambda 处理来自 Amazon SQS 标准队列的消息。Lambda 函数通过调用外部 API 来丰富每条 SQS 消息,然后将数据写入 Amazon Redshift 表。该队列必须支持每秒多达 1,000 条消息。在测试期间,由于处理了重复的 SQS 消息,Redshift 表中反复插入了重复行;所有重复消息都在彼此的 1 分钟内入队。开发人员应如何解决此问题?
选择一个答案
点击一个选项来检查您的答案。
正确答案: 切换到 SQS FIFO 队列并启用该 FIFO 队列上的消息去重。.
为什么这是答案
正确答案是切换到 SQS FIFO 队列并启用该 FIFO 队列上的消息去重。 Amazon SQS FIFO(先入先出)队列确保消息严格按发送顺序处理,并且支持消息去重。当启用内容去重时,如果多条消息在去重间隔(默认为 5 分钟)内具有相同的内容,SQS 会将其视为同一条消息,只传递一次。这直接解决了因重复处理 SQS 消息而导致的 Redshift 重复行问题。 降低 Lambda 函数的最大并发数可能有助于减少重复处理的可能性,但不能从根本上解决 SQS 传递重复消息的问题,也不能保证去重。使用 Lambda 的 /tmp 目录跟踪消息 ID 不可行,因为 /tmp 是临时的,并且在不同的 Lambda 调用之间不共享,无法实现跨函数调用的去重。标准 SQS 队列不支持消息组 ID 或消息去重功能,这些是 FIFO 队列特有的特性。
通过考试 — 无需无休止地寻找答案
将本次考试的所有验证问题和解释集中在一处,节省数小时的准备时间。1,000+ 认证 · 20+ 语言 · 免费开始。
更快通过考试 → 无需银行卡