Javascript 使用aws向sqs发送多条消息后,sqs处理程序lambda丢失了部分消息请求

Javascript 使用aws向sqs发送多条消息后,sqs处理程序lambda丢失了部分消息请求,javascript,amazon-web-services,amazon-sqs,Javascript,Amazon Web Services,Amazon Sqs,我从其他地方向sqs发送了一条消息,该消息只会通知sqs处理程序lambda输出一个日志。没有其他耗时的操作。代码类似于: const sqs: AWS.SQS = new AWS.SQS() const params = { MessageGroupId: "testGroup", MessageDeduplicationId: uuid(), MessageBody: "My Message",

我从其他地方向sqs发送了一条消息,该消息只会通知sqs处理程序lambda输出一个日志。没有其他耗时的操作。代码类似于:

  const sqs: AWS.SQS = new AWS.SQS()
   const params = {
       MessageGroupId: "testGroup",
       MessageDeduplicationId: uuid(),
       MessageBody: "My Message",
       QueueUrl: process.env.SQS_URL
   };

   await sqs.sendMessage(params).promise();
如果是单个消息,则一切正常。
如果我对多条消息使用wait promise.all([p1,p2,p3]),则在处理消息的lambda中只能接收部分请求,而另一部分则丢失

多条消息:

await Promise.all([
   sqs.sendMessage(params1).promise(),
   sqs.sendMessage(params2).promise(),
   sqs.sendMessage(params3).promise()
])
sqs处理程序:

exports.handler = wapper(async (event: any, context: any) => {
    context.callbackWaitsForEmptyEventLoop = false    
    logger.info('enter sqs handler----')
})

我还检查了aws sqs仪表板监控图表,确认一切正常,发送了100条消息,收到了100条消息。
但事实上,从cloudwatch日志可以看出,当消息被使用时,只有部分消息触发sqs处理程序lambda

如何解决丢失的请求问题

sqs仪表板配置:

“在处理消息的lambda中只能接收到请求的一部分,而另一部分丢失”-您所说的“请求的一部分”是什么意思?在您的示例中,您发送了3个请求,您是说lambda没有收到1个或更多请求吗?lambda处理的批量是多少?您知道sqs sdk中有一个名为
sendMessageBatch
的函数,它一次最多可以发送10条消息,比多次调用
sendMessage
更有效吗?例如,如果发送3条消息,我可以在监控中看到收到3条消息,sqs处理程序中只有1-2个请求。我没有注意批大小。它应该是默认值。我需要检查一下。在实际情况下,我们可能需要处理100条消息,因此在使用sendMessageBatch时,此问题仍然可能发生。我希望先解决sendMessage的问题,谢谢默认情况下,我认为批处理大小是10,因此单个lambda可以在单个事件中同时处理所有3条消息。您是否已检查该事件以查看它包含多少记录?我不得不猜测,因为您没有显示实际处理事件的代码,但是如果您没有在数组中循环并处理每个记录,那么这可能是记录似乎消失的原因。另一个原因可能是,如果处理每条记录需要很长时间,并且您的DLQ设置具有较低的最大可见性计数,则消息可能会移动到DLQ,因为它没有及时处理。您所说的事件。记录确实提醒了我。我检查了代码,发现event.Records确实有问题。我们以前只使用过事件记录[0]。非常感谢你。