Warum zeigt meine Amazon-SQS-FIFO-Warteschlange nicht alle Nachrichten oder Nachrichten in anderen Nachrichtengruppen an?

Lesedauer: 4 Minute
0

Meine First-In-First-Out (FIFO)-Warteschlange von Amazon Simple Queue Service (Amazon SQS) zeigt einige Nachrichten nicht an, wenn ich die ReceiveMessage-API aufrufe.

Lösung

Wenn du FIFO-Warteschlangen verwendest, kannst du nicht den Empfang von Nachrichten von einer bestimmten Nachrichtengruppen-ID anfordern. Du kannst den ReceiveMessage-API-Aufruf auch nicht so filtern, dass jeweils nur die Nachrichten innerhalb einer Nachrichtengruppe angezeigt werden.

Wenn du im ReceiveMessage-API-Aufruf einen MaxNumberOfMessage-Parameter angibst, zeigt SQS so viele Nachrichten wie möglich mit derselben Nachrichtengruppen-ID an. Der ReceiveMessage-API-Aufruf kann auch Nachrichten von anderen verfügbaren Nachrichtengruppen anzeigen.

Beachte bei FIFO-Warteschlangen die folgenden Richtlinien, wenn du Nachrichten erhältst, die zu einer bestimmten Nachrichtengruppen-ID gehören:

  • Du musst die Nachrichten in der aktuellen Nachrichtengruppen-ID löschen, bevor du weitere Nachrichten innerhalb derselben Nachrichtengruppen-ID empfangen kannst.
  • Nachrichten, die empfangen, aber noch nicht gelöscht wurden, befinden sich im Status „Inflight“. Inflight-Nachrichten blockieren die Zustellung verfügbarer Nachrichten innerhalb derselben Nachrichtengruppe.
  • Ein häufiger Grund dafür, dass sich Nachrichten im Inflight-Status befinden, ist, dass der Verbraucher-Client unerwartet ausfällt. Ein weiterer Grund liegt darin, dass die nachgeschaltete Verbraucher-Funktion von AWS Lambda auf Ausnahmen gestoßen ist oder ihre maximale Parallelität erreicht hat.
  • Das ChangeMessageVisibility API kann das Sichtbarkeitszeitlimit für Inflight-Nachrichten verlängern oder verkürzen.
  • Du kannst warten, bis das Sichtbarkeitszeitlimit für die Nachrichten abgelaufen ist, damit die Nachricht erneut zugestellt werden kann.

Beachte für alle FIFO-Warteschlangen und Amazon-SQS-Kontingentlimits die folgenden Richtlinien:

  • FIFO-Warteschlangen haben maximal 120 000 Inflight-Nachrichten.

    **Hinweis:**Amazon SQS zeigt keine Fehlermeldungen an, die die Kontingentlimits überschreiten.

  • FIFO-Warteschlangen können bis zu 300 Transaktionen pro Sekunde (TPS) verarbeiten, ohne dass der hohe Durchsatz aktiviert ist. Bei Anfragen über 300 TPS wird der Fehler „ThrottlingException“ angezeigt, auch wenn Nachrichten in der Warteschlange verfügbar sind.

  • SQS-FIFO-Warteschlangennachrichten werden in Partitionen gespeichert. Jede Partition unterstützt bis zu 300 TPS für Sende-, Empfangs- und Löschvorgänge. Weitere Informationen findest du unter Optimieren der Partitionsnutzung.

  • FIFO-Warteschlangen mit hohem Durchsatz können sich eine Partition mit mehreren Nachrichtengruppen teilen. Wenn eine Nachrichtengruppe 300 TPS für ihre Partition überschreitet, werden Nachrichten von anderen Gruppen auf dieser Partition aufgrund der Drosselung nicht zugestellt.

  • FIFO-Warteschlangen-Transaktionen mit hohem Durchsatz pro Sekunde variieren je nach AWS-Region. Weitere Informationen findest du unter Amazon SQS-Nachrichtenkontingente.

Beachte die folgenden Richtlinien, um das Amazon-SQS-Durchsatzlimit für FIFO-Warteschlangen zu reduzieren:

Eine FIFO-Warteschlange durchsucht die ersten 120 000 Nachrichten, um die verfügbare Nachrichtengruppe zu ermitteln. Wenn Nachrichtengruppen in den ersten 120 000 Nachrichten aufgrund von Inflight-Nachrichten blockiert werden, werden Nachrichten von anderen Gruppen, die über die ersten 120 000 hinausgehen, nicht angezeigt. Weitere Informationen findest du unter Vermeiden eines großen Nachrichtenrückstands mit derselben Nachrichtengruppen-ID in Amazon SQS.

Beispiel A

Eine FIFO-Warteschlange hat insgesamt 120 001 Nachrichten. Die ersten 120ž 000 Nachrichten gehören zur Nachrichtengruppe 1 und die letzte Nachricht gehört zur Nachrichtengruppe 2. Wenn du versuchst, Nachrichten aus der Warteschlange zu empfangen, erhältst du nur Nachrichten aus Gruppe 1. Alle weiteren ReceiveMessage-API-Aufrufe führen zu leeren Ergebnissen. Dies liegt daran, dass FIFO nur die Nachrichten durchsucht, die zu Gruppe 1 gehören, und diese Gruppe durch den aktuellen Aufruf blockiert wird.

Beispiel B

Eine FIFO-Warteschlange hat insgesamt 120 000 Nachrichten. Die ersten 119 999 Nachrichten gehören zur Nachrichtengruppe 1 und die letzte Nachricht gehört zur Nachrichtengruppe 2. Wenn du versuchst, Nachrichten aus der Warteschlange zu empfangen, erhält der erste ReceiveMessage-Aufruf eine Nachricht, die zu Gruppe 1 gehört. Der zweite ReceiveMessage-Aufruf ruft eine Nachricht ab, die zu Gruppe 2 gehört. Alle zusätzlichen ReceiveMessage-Aufrufe führen zu leeren Ergebnissen, da beide Gruppen jetzt durch die aktuellen Aufrufe blockiert werden.

Ähnliche Informationen

Arbeiten mit Amazon Simple Queue Service-Warteschlangen

AWS OFFICIAL
AWS OFFICIALAktualisiert vor 6 Monaten