Aws lambda Requeue通过lambda接收到SQS消息

Aws lambda Requeue通过lambda接收到SQS消息,aws-lambda,amazon-sqs,Aws Lambda,Amazon Sqs,工作原理:使用AWS-SQS SDK for.Net,我能够在消息可见性计时器窗口中接收消息批并删除单个消息。我也不能做任何事情,并有效地重新排队的消息,然后得到死信,如果它的重新排队配置的次数 什么不起作用:我正试图用Lambda做同样的事情。我已经创建了一个触发器,这意味着SQS会触发lambda发送一批消息。发生这种情况时,这些消息似乎会自动从队列中删除。我无法控制删除或重新查询单个邮件 在lambda中抛出异常似乎会使批处理中的所有消息都保留在队列中。是否有一种更优雅的方法来执行此操作,

工作原理:使用AWS-SQS SDK for.Net,我能够在消息可见性计时器窗口中接收消息批并删除单个消息。我也不能做任何事情,并有效地重新排队的消息,然后得到死信,如果它的重新排队配置的次数

什么不起作用:我正试图用Lambda做同样的事情。我已经创建了一个触发器,这意味着SQS会触发lambda发送一批消息。发生这种情况时,这些消息似乎会自动从队列中删除。我无法控制删除或重新查询单个邮件

在lambda中抛出异常似乎会使批处理中的所有消息都保留在队列中。是否有一种更优雅的方法来执行此操作,以及是否有一种方法可以对单个邮件而不是整批邮件执行此操作?

当您使用时,如果处理成功,您的邮件将自动从队列中删除

如果愿意,可以轮询来自SQS的消息,而不是让消息触发Lambda。为了做到这一点,只需不为Lambda函数配置触发器,而是让它通过。每次执行时,您都会轮询SQS队列以获取新消息。我真的不明白你为什么要这么做,因为触发和自动删除消息非常方便。如果要向DLQ发送失败消息,只需在源SQS队列本身上设置DLQ即可。然后,您可以自定义
maxReceiveCount
,一旦达到此阈值,消息将转到配置的DLQ

从文档中:

如果一条消息多次处理失败,AmazonSQS可以发送它 到死信队列。在源上配置死信队列 队列以保留处理失败的消息以进行故障排除。 将队列的重新驱动策略上的maxReceiveCount设置为至少5到5 避免由于限制而向死信队列发送消息


我之所以想这么做,是因为我可以像我提到的那样,以不同的方式对待批处理中的一些消息。我希望能够处理一些消息,并在队列中留下一些消息。关于第二位,我已经将SQS配置为向DLQ发送失败的消息,但我的问题是lambda如何告诉SQS消息处理失败,而不是引发未处理的异常?如果有必要的话,我正在使用.net核心lambda。另外,谢谢,云观察计划lambda似乎是我可以使用的东西。我目前使用的SQS lambda触发器的消息批大小为1,但我猜这可能效率低下。是的,通过抛出异常。如果在源队列上配置了
maxReceiveCount
,它应该可以工作。现在它一点也不起作用吗?