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

AWS-Lambda和SQS行为

曾嘉祯
2023-03-14

我已经设置了SQS、Deadlettque(DLQ)和lambda。我对SQS收到的正文格式有一些疑问。经过一些尝试后,我可以看到一些消息以DLQ结尾。

我读了许多文献,但实际上我仍然不能理解一些基本的东西。

我的任务相当简单。我将使用Axios向外部API发送一些有效负载。那个API可能会给我一个错误,或者当时不可用。此代码非常简单,但最后将包括Axios实现:

exports.handler = async (event, context) => {   
    event.Records.forEach(record => {
    const { body } = record;
    const { messageAttributes } = record;
    console.log(body)
    console.log(messageAttributes);
  });  
    let somethingWentWrongWithApi = new Error();
    throw somethingWentWrongWithApi;    
}; 

运行后,过了一段时间,我在DLQ中看到消息,原始SQS是空的,正如我所预料的那样。

在实际代码中,我将使用catch块。在它里面我会抛出错误,就像例子中一样。Lambda将尝试执行它三次(我不确定从哪里获得此信息)。然后,它将把它返回给SQS,SQS将把它推送到DLQ。

我想知道,我应该在Lambda重试中实现,并且在三次抛出错误之后。。。或者干脆扔掉它,依靠现有的程序(三次再审)?

我仍然在阅读关于SQS和Lambda的不同设置的文章。

共有1个答案

程举
2023-03-14

要扩展执行尝试,您必须转到:

  1. SQS服务

关于错误。如果lambda端出现错误,然后lambda抛出错误,您可以使用cloudwatch检查抛出的错误类型。

  1. 转到aws CloudWatch;
  2. 在右侧面板上找到日志;
  3. 选择日志组。

如果您有任何其他问题,请联系我。我会试着回答他们,我会扩展这个答案。

 类似资料:
  • 我使用的是AWS SQS服务,很难定义SQS队列上的权限。在我的设置中,我使用的是AWS Lambda服务,当一个对象被推到S3存储桶上时会触发该服务。 然而,让我简短地提问,这是我想要实现的: 对象被推送到S3存储桶中 正如您可以从前面的用例中看到的,我希望我的AWS Lambda方法是唯一可以向SQS队列发送消息的应用程序。我试图设置一个原则和一个条件“sourceArn”。但是它们都不起作用

  • 我见过许多关于限制Lambda并发执行的SO问题,但没有见过相反的问题。 我需要增加我的并发执行,但有问题。我在SQS队列中触发了一个Lambda。我已经发布了该函数的一个版本,并为它分配了3,000个并发执行(我的限制从默认的1,000增加到了5,000)。 尽管如此,当我运行我的进程时,我看到成千上万的消息在队列中等待,而我的Lambda函数的Monitoring选项卡显示我的“并发执行”从未

  • 我正在使用实现AWS SQS作业队列。正确处理作业(拉作业- PHP工匠队列:工作 但在Lambda环境中,使用相同的凭证,作业完成后不能删除。简而言之,拉作业- “errorType”:“Aws\Sqs\Exception\SQSExException”, “errorMessage”:“在上执行”DeleteMessage“时出错”https://sqs.ap-northeast-1.amaz

  • 我的公司有一个消息传递系统,它以JSON格式发送实时消息,它不是建立在AWS上我们的团队试图使用AWS SQS接收这些消息,然后用DynamoDB存储这些消息,我想用EC2读取这些消息,然后保存它们,有什么更好的解决方案吗?或者怎么做我没有很好的经验

  • 我想发送消息到SQS队列上的另一个帐户(俄亥俄州)从lambda在北弗吉尼亚帐户。我该如何实现这一点? 到目前为止我尝试过的事情: > 从北Virigina的lambda发送消息,收到以下错误: “errorMessage”:“调用SendMessage操作时发生错误(AWS.SimpleQueueService.NonExistentQueue):

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