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

Lambda是否会收到已使用的SQS消息?

巫马炫明
2023-03-14

我有一个这样的系统设计

SQS-

前提条件

  1. Lambda函数使用try-catch块,它不会抛出任何错误

跑了一会儿之后

  1. 我们在DLQ中发现了一些信息
  2. DLQ中的消息具有属性近似接收计数为2或更大。

这和预期的一样吗

在我看来,如果没有错误抛出在Lambda,DLQ消息应该总是零。

共有1个答案

谢英光
2023-03-14

SQS被设计为提供至少一次递送。您的消息有可能被多个lambda调用接收。

如果您需要一次传递,请考虑使用FIFO队列。

关于问题的第二部分-为什么要将消息写入DLQ。最简单的故障排除方法是查找lambda调用日志,这些日志与DLQ中SQS消息的某些唯一标识方面相匹配。

 类似资料:
  • 我面临着这样的行为。 我有lambda是由api网关触发的。在这种情况下,我需要重新处理传入的请求。所以在这种情况下,我将传入的请求作为消息发送给延迟(30秒)的sqs。在sqs“默认可见性超时”设置为1分钟,并链接dlq队列。 在lambda中,我有下一个逻辑: > 当我收到api网关的请求,我的lambda决定重新处理它时,它会第一次将消息发送给sqs进行重新处理。我的lambda在30秒后收

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

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

  • 我目前正在使用亚马逊的SQS,在尝试删除当前“正在运行”的队列消息时遇到问题。 下面是一些示例代码: 现在,在接收到句柄和消息体之后,我将接收句柄字符串存储到云存储中(例如DynamoDB)。随后,我从存储服务中加载该句柄,并使用类似于以下内容的方式调用delete: 但是,当运行该行时,我收到一条“输入收据句柄无效”的错误消息。 注意,我知道这条消息没有被重新接收,所以记录的接收句柄应该是最新的

  • 但是,如果我的Lambda不期望任何输入,它将自己转到SQS并拉出消息,有输入有意义吗?我是否可以让它无效,或者甚至完全使用其他方法签名(当然,在本例中不实现那个接口)?

  • 我有一个lambda函数,负责检查服务器状态。当SQS收到新消息时需要调用它,并且不允许在SQS中更改任何内容。我尝试使用SQS Lambda触发器,但它会将消息推送到Lambda函数中= 我正在寻找处理这个问题的方法。我尝试使用CloudWatch来处理这个问题,但我不知道这是否可能?当SQS收到新消息时,Cloudwatch如何触发Lambda函数? 提前谢谢。