gpt4 book ai didi

amazon-web-services - 批量处理AWS Lambda消息

转载 作者:行者123 更新时间:2023-12-03 15:57:42 24 4
gpt4 key购买 nike

我在想什么,我真的找不到关于它的信息。也许这不是要走的路,但是,我只想知道。

这是关于Lambda批量工作的。我知道我可以设置Lambda来使用批处理消息。在我的Lambda函数中,我迭代每条消息,如果一条消息失败,则Lambda退出。然后循环再次开始。

我想知道稍微不同的方法
假设我有3条消息: A B C 。我也分批服用。现在,如果消息B失败(例如API调用失败),我将消息B返回给SQS,并继续处理消息C。

是否可以?如果是,这是一个好方法吗?因为我看到我需要在Lambda中实现一些额外的复杂性,而没有实现。

谢谢

最佳答案

有一篇很棒的文章here。与您相关的部分是...

  • 使用batchSize为1,以便消息自行成功或失败。
  • 确保您的处理是幂等的,因此在处理额外费用之外,重新处理消息不会造成危害。
  • 处理功能代码中的错误,可能是通过捕获错误并将消息发送到死信队列进行进一步处理。
  • 成功处理消息后,在函数中手动调用DeleteMessage API。

  • 最后一点是我如何处理相同的问题。与其立即返回错误,不如存储它们或注意已发生错误,而是继续处理批处理中的其余消息,而不是立即返回错误。在处理结束时,返回或引发错误,以使SQS-> lambda触发器知道不删除失败的消息。您的lambda处理程序将删除所有成功的消息。

    sqs = boto3.client('sqs')

    def handler(event, context):
    failed = False

    for msg in event['Records']:
    try:
    # Do something with the message.
    handle_message(msg)
    except Exception:
    # Ok it failed, but allow the loop to finish.
    logger.exception('Failed to handle message')
    failed = True
    else:
    # The message was handled successfully. We can delete it now.
    sqs.delete_message(
    QueueUrl=<queue_url>,
    ReceiptHandle=msg['receiptHandle'],
    )

    # It doesn't matter what the error is. You just want to raise here
    # to ensure the trigger doesn't delete any of the failed messages.
    if failed:
    raise RuntimeError('Failed to process one or more messages')

    def handle_msg(msg):
    ...

    关于amazon-web-services - 批量处理AWS Lambda消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54596129/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com