AWS-SDK 问题 w/deleteMessageBatch,告诉我 MissingParameter 但我不是

问题描述 投票:0回答:2

我收到以下消息

UnhandledPromiseRejectionWarning:MissingParameter:请求必须包含参数DeleteMessageBatchRequestEntry.1.Id。

我想我正在按照

T
的文档进行操作,位于 AWS-SDK/SQS

我正在使用此代码

var params = {
          Entries: _.map(_.uniqWith(data.Messages,d=>d.MessageId),d=>({
            Id: d.MessageId,
            ReceiptHandle: d.ReceiptHandle
          })),
          QueueUrl: xx.QueueUrl
        };
await sqs.deleteMessageBatch(params).promise();

这是发送时 params 的样子;如果你问我的话,看起来就像文档一样......

{ 
    Entries: [
      {
        Id: "83ba1e18-someid", 
        ReceiptHandle: "AQEB79CDI1Q+blablabla"
      }
    ]
    QueueUrl: "https://sqs.us-west-2.amazonaws.com/somequeeuurl"
}

我的系统:

aws-sdk: "^2.354.0",
MacOS - current
node 8.12.0
aws-sdk amazon-sqs
2个回答
5
投票

UnhandledPromiseRejectionWarning:MissingParameter:请求必须包含参数DeleteMessageBatchRequestEntry.1.Id。

我只是花了很长时间查看这个错误并调试我的代码。我最终发现的是,它似乎试图说请求中至少需要有一个

DeleteMessageBatchRequestEntry
元素 - 不能有 0。当我重构我们的代码并添加一项检查以确保如果列表中没有条目,我们就不会提出请求,这个问题就消失了。

您是否有可能在某些情况下实际发送以下内容?

{ 
    Entries: []
    QueueUrl: "https://sqs.us-west-2.amazonaws.com/somequeeuurl"
}

0
投票

我对 SendMessageBatch 也有类似的错误:

The request must contain the parameter SendMessageBatchRequestEntry.1.Id.

我相信该消息试图表明条目列表中的第一个条目需要字段

id

我通过设置 Entry id 解决了这个问题:

var entry = SendMessageBatchRequestEntry
  .builder()
  .messageBody(body)
  .id(someUniqueID)
  .build();
© www.soinside.com 2019 - 2024. All rights reserved.