>source

Lambda 트리거가 있는 SQS 대기열이 있는 솔루션을 개발 중입니다. Lambda는 처리할 메시지를 일괄적으로 수신하고, Lambda 함수가 성공하면 SQS 대기열의 메시지가 자동으로 삭제되는 것으로 알고 있습니다. 그러나 이러한 메시지 중 일부만 삭제하도록 허용하려면 어떻게 해야 합니까?

이 사용 사례를 가정해 보겠습니다. Lambda 함수는 10개의 메시지가 포함된 배치를 수신하고 7개의 메시지만 유효하고 처리할 수 있으며 나머지 3개의 메시지는 나중에 다시 처리해야 합니다.

최초의 생각은 다음을 통해 가시성 제한 시간을 업데이트할 수 있다는 것이었습니다.boto3.sqs.change_visibility_timeout3개의 메시지 각각에 대해 타임아웃 후에 다시 처리하도록 하지만 전체 람다 함수 실행이 성공하므로 SQS 대기열에서 10개의 메시지가 모두 삭제됩니다.

제안 사항이 있습니까?

  • 답변 # 1

    예, 기본적으로 Lambda 함수는 성공 시 모든 메시지를 삭제합니다. code에서 이를 처리해야 하지만 메시지의 표시 제한 시간을 변경하면 안 됩니다.

    실제로 실패한 메시지를 처리할 DLQ(데드-레터 큐)를 추가합니다(설정 방법에 따라 메시지는 특정 횟수의 실패한 처리 시도 후 DLQ로 이동).

    여기에는 몇 가지 옵션이 있습니다.

    1. 각 항목을 직접 처리할 수 있으며 성공적으로 처리된 메시지는 삭제할 수 있습니다. 메시지가 성공하지 못한 경우 오류가 발생할 수 있으며 람다 함수에 의해 자동으로 삭제되지 않습니다.
    2. JavaScript를 사용하는 경우 미디
    3. 파이썬을 사용하는 경우

    당신의 응답을 주셔서 감사합니다. Lambda PowerTools가 제가 찾던 것 같습니다. Lambda PowerTools에 대한 이해를 바탕으로 성공적으로 처리된 메시지와 삭제되지 않은 메시지를 삭제하도록 허용하여 SQS Lambda 트리거를 계속 활용하고 각 항목을 직접 처리할 수 있어야 합니까?

    Jin K2021-10-14 06:45:10

    네 맞습니다

    Caldazar2021-10-14 06:45:10
  • 이전 스타일 및 브러시에 대한 Wpf ResourceDictionary 및 MergedDictionaries 방법
  • 다음 c# : UWP에서 windows.media.ocr을 사용하여 OCR 품질 향상