Warum zeigt meine Amazon-SQS-FIFO-Warteschlange nicht alle Nachrichten oder Nachrichten in anderen Nachrichtengruppen an?
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 Sie FIFO-Warteschlangen verwenden, können Sie nicht den Empfang von Nachrichten von einer bestimmten Nachrichtengruppen-ID anfordern. Sie können den ReceiveMessage-API-Aufruf auch nicht so filtern, dass jeweils nur die Nachrichten innerhalb einer Nachrichtengruppe angezeigt werden.
Wenn Sie im ReceiveMessage-API-Aufruf einen MaxNumberOfMessage-Parameter angeben, 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.
Beachten Sie bei FIFO-Warteschlangen die folgenden Richtlinien, wenn Sie Nachrichten erhalten, die zu einer bestimmten Nachrichtengruppen-ID gehören:
- Sie müssen die Nachrichten in der aktuellen Nachrichtengruppen-ID löschen, bevor Sie weitere Nachrichten innerhalb derselben Nachrichtengruppen-ID empfangen können.
- 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.
- Sie können warten, bis das Sichtbarkeitszeitlimit für die Nachrichten abgelaufen ist, damit die Nachricht erneut zugestellt werden kann.
Beachten Sie für alle FIFO-Warteschlangen und Amazon-SQS-Kontingentlimits die folgenden Richtlinien:
- FIFO-Warteschlangen haben maximal 20.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 finden Sie 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 finden Sie unter Kontingente für Nachrichten.
Beachten Sie die folgenden Richtlinien, um das Amazon-SQS-Durchsatzlimit für FIFO-Warteschlangen zu reduzieren:
- Verwenden Sie die API-Batch-Aktionen von Amazon SQS SendMessageBatch, DeleteMessageBatch und ChangeMessageVisibilityBatch, um Kosten zu reduzieren oder bis zu zehn Nachrichten zu ändern. Stellen Sie für die ReceiveMessage-API den Parameter MaxNumberofMessages auf den Empfang von bis zu zehn Nachrichten pro Transaktion ein. Weitere Informationen finden Sie unter Amazon-SQS-Batch-Aktionen.
- Folgen Sie bei FIFO-Warteschlangen mit hohem Durchsatz den Empfehlungen zur Optimierung der Partitionsnutzung. Senden Sie Nachrichten mit denselben Nachrichtengruppen-IDs stapelweise. Löschen Sie Nachrichten oder ändern Sie das Sichtbarkeitszeitlimit für Nachrichten in Batches mit Empfangsidentifikatoren aus denselben ReceiveMessage-API-Anfragen.
- Aktivieren Sie den hohen Durchsatz für FIFO-Warteschlangen.
- Verwenden Sie für FIFO-Warteschlangen mit hohem Durchsatz eine MessageGroupID mit mehreren eindeutigen Werten. Dies ermöglicht eine gleichmäßige Verteilung auf die FIFO-Warteschlangenpartitionen. Weitere Informationen finden Sie unter Verwenden der Amazon-SQS-Nachrichtengruppen-ID.
Eine FIFO-Warteschlange durchsucht die ersten 20.000 Nachrichten, um die verfügbare Nachrichtengruppe zu ermitteln. Wenn Nachrichtengruppen in den ersten 20.000 Nachrichten aufgrund von Inflight-Nachrichten blockiert werden, werden Nachrichten von anderen Gruppen, die über die ersten 20.000 hinausgehen, nicht angezeigt. Weitere Informationen finden Sie unter Einen großen Rückstand an Nachrichten mit derselben Gruppen-ID vermeiden.
Beispiel A
Eine FIFO-Warteschlange hat insgesamt 20.001 Nachrichten. Die ersten 20.000 Nachrichten gehören zur Nachrichtengruppe 1 und die letzte Nachricht gehört zur Nachrichtengruppe 2. Wenn Sie versuchen, Nachrichten aus der Warteschlange zu empfangen, erhalten Sie 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 20.000 Nachrichten. Die ersten 19.999 Nachrichten gehören zur Nachrichtengruppe 1 und die letzte Nachricht gehört zur Nachrichtengruppe 2. Wenn Sie versuchen, 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
Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 3 Jahren
- AWS OFFICIALAktualisiert vor einem Jahr
- AWS OFFICIALAktualisiert vor einem Jahr