Warum versucht meine Lambda-Funktion gültige Amazon-SQS-Nachrichten erneut und platziert sie in meine Warteschlange für unzustellbare Nachrichten?

Letzte Aktualisierung: 01.11.2021

Ich habe meine AWS-Lambda-Funktion für die Verarbeitung von Nachrichten in einer Warteschlange von Amazon Simple Queue Service (Amazon SQS) konfiguriert. Jetzt werden einige meiner gültigen Amazon-SQS-Nachrichten mehrmals bis zum maxReceiveCount empfangen und landen in meiner Warteschlange für unzustellbare Nachrichten. Warum passiert das und wie stelle ich sicher, dass meine Lambda-Funktion alle meine gültigen Amazon-SQS-Nachrichten verarbeitet?

Kurzbeschreibung

Wenn Ihre Lambda-Funktion gedrosselt ist, einen Fehler zurückgibt oder beim Lesen eines Amazon-SQS-Nachrichtenstapels nicht antwortet, kehren die Nachrichten in Ihre Warteschlange zurück. Nachdem die Zeitbeschränkung für die Sichtbarkeit eingetreten ist, erhält Ihre Lambda-Funktion den Nachrichtenstapel erneut. Wenn Ihre Funktion mehrmals gültige Nachrichten nicht verarbeitet, sendet Amazon SQS die Nachrichten an Ihre Warteschlange für unzustellbare Nachrichten, sofern Sie eine konfiguriert haben.

Um zu verhindern, dass gültige Nachrichten in eine Warteschlange für unzustellbare Nachrichten gestellt werden, muss Ihr Funktionscode idempotent sein und Nachrichten mehrmals verarbeiten können.

Auflösung

Stellen Sie sicher, dass der Code Ihrer Lambda-Funktion idempotent ist

Bewährte Methoden für Idempotenz und Beispielfunktionslogik finden Sie unter Wie mache ich mein Lambda idempotent?

Stellen Sie sicher, dass die Zeitbeschränkung für die Sichtbarkeit Ihrer Amazon-SQS-Warteschlange mindestens sechs Mal länger ist als die Zeitbeschränkungseinstellung Ihrer Lambda-Funktion

Stellen Sie die Zeitbeschränkung für die Sichtbarkeit Ihrer Quellwarteschlange auf mindestens sechs Mal länger als die Zeitbeschränkung Ihrer Funktion ein. Die zusätzliche Zeit ermöglicht es Ihrer Funktion, einen Stapel erneut zu verarbeiten, wenn die Funktion während der Verarbeitung eines vorherigen Stapels gedrosselt wird.

Weitere Informationen finden Sie unter Einstellung der Zeitbeschränkung für die Sichtbarkeit im Entwicklerhandbuch zu Amazon SQS.

Hinweis: Wenn Ihre Funktion keine Nachrichten empfängt, weil die Zeitbeschränkung für die Sichtbarkeit der Warteschlange nicht lang genug ist, werden die Nachrichten nicht in Amazon CloudWatch Logs aufgezeichnet.

Stellen Sie sicher, dass das Attribut maxReceiveCount in der Redrive-Richtlinie Ihrer Quellwarteschlange auf mindestens fünf festgelegt ist

Setzen Sie maxReceiveCount für die Redrive-Richtlinie der Quellwarteschlange auf mindestens fünf. Wenn Ihre Funktion einen Fehler zurückgibt oder aufgrund ihrer maximalen Gleichzeitigkeit nicht aufgerufen werden kann, kann die Verarbeitung mit zusätzlichen Versuchen erfolgreich sein. Ein maxReceiveCount von mindestens fünf gibt Ihren Nachrichten mehr Chancen, verarbeitet zu werden, bevor sie an Warteschlange für unzustellbare Nachrichten gesendet werden.

Weitere Informationen finden Sie unter Wie funktionieren Warteschlangen für unzustellbare Nachrichten? und Vermeiden Sie inkonsistente Nachrichtenverarbeitung im Entwicklerhandbuch zu Amazon SQS.

Identifizieren und beheben Sie alle Fehler, die Ihre Lambda-Funktion zurückgibt

Folgen Sie den Anweisungen unter Wie behebe ich Lambda-Funktionsfehler? Ihre Funktion entfernt automatisch Nachrichten nur dann aus Ihrer Warteschlange, wenn die Funktion keinen Fehler zurückgibt.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?