AWS Lambda无法接收SQS FIFO队列全部消息问题排查咨询
问题成因
- 核心原因:你使用的是FIFO类型的SQS队列,且开启了
ContentBasedDeduplication: true的内容去重配置,但是5条测试消息的MessageBody完全相同,均为Publish messages to send mailer lambda。FIFO队列的内容去重规则会在默认5分钟的去重窗口期内,计算消息体的哈希值,哈希相同的消息会被判定为重复消息直接丢弃,因此后续4条消息根本没有进入队列。 - 其他可排查点:
- 检查发布端Lambda的执行日志,确认5次
sendMessage调用返回的MessageId是否均不相同,如果存在重复MessageId,即可确认是去重规则导致的消息丢弃。 - 登录AWS SQS控制台查看对应队列的可用消息数,如果队列中仅存在1条可用消息,即可确认消息在入队阶段就被拦截。
- 排查消费端Lambda的调用日志是否有异常报错,不过当前消费端仅做日志打印没有抛出异常,Lambda会默认确认消息,该情况概率极低。
- 你当前的SQS
VisibilityTimeout设置为45,大于消费端Lambda的30秒超时,不存在消息未处理完就重新回到队列的配置问题,无需调整。
- 检查发布端Lambda的执行日志,确认5次
修复方案
- 方案一:修改发布端代码,给每条消息设置唯一的
MessageBody,比如将用户ID、booking ID等唯一字段拼接进消息体,避免内容去重误判。 - 方案二:如果业务场景不需要内容去重能力,直接将SQS配置中的
ContentBasedDeduplication属性改为false即可。
内容的提问来源于stack exchange,提问作者Abhishek wagh
相关产品推荐
相关产品推荐

