Warum gibt meine Amazon-SQS-FIFO-Warteschlange nicht alle Nachrichten oder Nachrichten in anderen Nachrichtengruppen zurück?

Letzte Aktualisierung: 26.08.2021

Meine Amazon Simple Queue Service (Amazon SQS) First-In-First-Out-Warteschlange (FIFO) gibt einige Nachrichten nicht zurück, wenn ich die ReceiveMessage-API aufrufe. Warum gibt meine SQS-FIFO-Warteschlange nicht alle Nachrichten von einer bestimmten Nachrichtengruppen-ID oder von anderen Nachrichtengruppen zurück?

Lösung

Für FIFO-Warteschlangen können Sie nicht anfordern, Nachrichten von einer bestimmten Nachrichtengruppen-ID zu empfangen. Wenn Sie einen MaxNumberOfMessages-Parameter im API-Aufruf ReceiveMessage angeben, gibt SQS so viele Nachrichten mit derselben Nachrichtengruppen-ID wie möglich zurück. Andere Verbraucher oder andere ReceiveMessage-Aufrufe können dann Nachrichten mit einer anderen Nachrichtengruppen-ID verarbeiten.

Beachten Sie bei FIFO-Warteschlangen Folgendes, wenn Sie eine Nachricht erhalten, die zu einer bestimmten Nachrichtengruppen-ID gehört:

  • Sie müssen Nachrichten im aktuellen Empfangsgespräch löschen oder verschieben, bevor Sie weitere Nachrichten von derselben Gruppen-ID erhalten können.
    Hinweis: Nachrichten müssen aus dem verfügbaren Inflight-Status verschoben werden.
  • Sie können keine Nachrichten in anderen Nachrichtengruppen empfangen.

Eine FIFO-Warteschlange durchsucht die ersten 20 000 Nachrichten, um die verfügbare Nachrichtengruppe zu ermitteln. Wenn alle Nachrichtengruppen in den ersten 20 000 Nachrichten aufgrund von Inflight-Nachrichten blockiert werden, werden Nachrichten von anderen Gruppen außerhalb der ersten 20 000 nicht zurückgegeben. Weitere Informationen finden Sie unter Vermeiden eines großen Rückstands an Nachrichten mit derselben Gruppen-ID.

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 eine Nachricht nur von Gruppe 1. Alle aufeinanderfolgenden ReceiveMessage-Aufrufe führen zu leeren Empfängen. Dies geschieht, weil FIFO nur die Nachrichten durchschaut, die zur 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 der Gruppe 1. Der zweite ReceiveMessage-Aufruf erhält eine Nachricht der Gruppe 2. Alle zusätzlichen ReceiveMessage-Aufrufe führen zu leeren Empfängen, da beide Gruppen jetzt durch die aktuellen Anrufe blockiert werden.


War dieser Artikel hilfreich?


Benötigen Sie Hilfe zur Fakturierung oder technischen Support?