AWS SDK SQS调用sendMessage报MessageDeduplicationID参数错误求助
解决SQS sendMessage中"Unexpected key 'MessageDeduplicationID'"错误
看起来你遇到的问题大概率是两个常见原因之一,咱们一步步排查:
1. 确认队列是否为FIFO类型
MessageDeduplicationId(注意大小写)这个参数仅适用于FIFO队列,标准队列不支持该参数。你可以通过队列URL快速判断:FIFO队列的URL结尾一定是.fifo,比如:
https://sqs.us-east-1.amazonaws.com/123456789012/my-queue.fifo
如果你的队列URL没有.fifo后缀,那就是标准队列,去掉MessageDeduplicationID参数即可解决错误。
2. 修正参数名的大小写错误
这是最容易踩坑的点!AWS SDK v2中该参数的正确名称是MessageDeduplicationId(最后一个字母是小写的d,不是大写D)。你代码里写的是MessageDeduplicationID(大写D结尾),SDK无法识别这个非标准参数名,所以抛出了"Unexpected key"错误。
修正后的代码应该是这样:
const result = await sqs.sendMessage({ MessageBody: JSON.stringify(item), QueueUrl: QUEUE_URL, MessageGroupId: groupId, MessageDeduplicationId: deduplicationId, // 这里改成小写d结尾 }).promise();
额外验证点
你的AWS SDK版本2.692.0是2020年发布的,完全支持FIFO队列的相关参数,所以版本本身没问题。另外,指定apiVersion为2012-11-05也没问题——这个版本的API已经包含FIFO队列的所有功能,不需要修改apiVersion。
如果以上两步都做了还是有问题,可以确认下QUEUE_URL确实指向的是FIFO队列,并且你的IAM权限允许操作该队列。
内容的提问来源于stack exchange,提问作者Mon
相关产品推荐
相关产品推荐

