当前位置: 首页 > 知识库问答 >
问题:

AWS Lambda SQS(爪哇)。Lambda已成功完成工作,但未从SQS中删除消息。是否应再次将此消息发送到process?

逑衡
2023-03-14

我面临着这样的行为。

我有lambda是由api网关触发的。在这种情况下,我需要重新处理传入的请求。所以在这种情况下,我将传入的请求作为消息发送给延迟(30秒)的sqs。在sqs“默认可见性超时”设置为1分钟,并链接dlq队列。

在lambda中,我有下一个逻辑

>

  • 当我收到api网关的请求,我的lambda决定重新处理它时,它会第一次将消息发送给sqs进行重新处理。我的lambda在30秒后收到消息。好啊

    但是当在这个重新处理过程中,我需要再次重新处理它时,我的lambda什么也不做,只是简单地完成了。因为在aws文档中,对于sqs中的消息确认,我需要发送删除请求。Lambda没有发送它。我认为它应该可以工作。但是没有。

    然后我的lambda再也没有收到这条消息,而且我在队列中也没有看到这条消息。

    但当我抛出异常而不是简单地完成工作时,lambda再次收到消息。

    这真的需要抛出异常,以便再次从sqs向lambda获取消息,而不是简单地不发送消息的删除请求。

    非常感谢。

  • 共有1个答案

    锺星腾
    2023-03-14

    正如您为SQS编写的文档所说,消息需要从队列中删除才能被视为已处理。否则,它们将被视为未处理,SQS将尝试再次交付它们,直到达到配置的限制。

    如果AWS文档分别说明了一些东西和AWS工作,那么就没有必要问AWS文档是否真的正确。

     类似资料:
    • 我有一个连接到lambda的队列(fifo)。我想在lambda中向标准队列发送一条消息。但没有发送/接收任何消息。然而,如果我尝试从非SQS连接的lambda(通过AppSync)发送它,它会工作。 我查过: lambda有权发送SQS消息(您可以在那里看到) 由于我已成功地从另一个lambda(非SQS)向标准队列发送消息,因此正确配置了标准队列 SQS URL是否正确 控制台中不会显示任何错

    • Spring Cloud AWS(1.0.0.rc2)中SimpleMessageListenerContainer类的当前实现似乎会在消息处理程序完成对消息的处理并且方法调用返回之后自动删除消息。 在我们的应用程序中,在从SQS上游队列删除消息之前,我们需要能够处理消息并等待来自下游队列的异步确认。类似于 接收SQS消息->处理消息->将消息发布到RabbitMQ(线程在此完成) 删除SQS消息

    • 我有一个这样的系统设计 SQS- 前提条件 Lambda函数使用try-catch块,它不会抛出任何错误 跑了一会儿之后 我们在DLQ中发现了一些信息 DLQ中的消息具有属性近似接收计数为2或更大。 这和预期的一样吗 在我看来,如果没有错误抛出在Lambda,DLQ消息应该总是零。

    • 我最近开始使用AWS,我的第一项工作是使用lambda函数使用SQS队列。 我知道我不需要调用receiveMessage,因为lambda函数已经在这里接收消息: 我的问题是:我应该给sqs打电话吗。是否为收到的每条消息删除消息?我知道lambda函数会自动删除已处理的消息,但一位朋友告诉我,我仍然需要手动调用deleteMessage,因为如果发生错误,如果我不手动删除每条消息,所有消息都会返

    • 我已经做了很多研究来找出为什么它会导致这个问题,但是我仍然不知道为什么。 我可以从控制台发送通知。我可以从控制台使用令牌向一个设备发送通知。 但是我不能从PHP发送云消息。 此外,我还编辑了build.gradle并添加了给定firebase的google-services.json。 Android清单 MyFirebaseMessagingService.java MyFireBaseInst

    • 我有一个基本的SQS队列,它使用redrive策略触发Lambda,在5次重试后将失败的消息发送到DLQ。我读到Lambda应该在消息中添加关于错误的消息属性 除了在DLQ中查看消息时,我没有看到任何来自Lambda的ErrorCode、ErrorMessage属性外,其他一切都正常工作。有人用这个吗?