Ich habe eine FIFO-SQS-Warteschlange, mit Sichtbarkeitszeit von 30 Sekunden. Die Anforderung besteht darin, Nachrichten so schnell wie möglich zu lesen und die Warteschlange zu löschen.Amazon SQS - FIFO Warteschlange Nachricht Anfrage, inkonsistent empfängt
Ich habe Code in JAVA in einer Art und Weise unten (dies nur nur eine Darstellung der Idee, nicht vollständiger Code):
//keep getting messages from FIFO and process them ASAP
while(true)
{
List<Message> messages =
sqsclient.receiveMessage(receiveMessageRequest).getMessages();
//my logic/code here to process these messages and delete them ASAP
}
In der while-Schleife, sobald die Nachrichten empfangen werden, Sie werden verarbeitet und aus der Warteschlange entfernt. Aber, viele Male die receiveMessageRequest gibt mir keine Nachrichten (gibt keine Nachrichten zurück).
Auch die Nachrichten Begrenzung ist nur 10 zu einem Zeitpunkt während des Empfangs von SQS, die bereits ein Problem ist, aber aufgrund dieser Null empfängt, häufen sich die Warteschlangen.
Ich habe keine Ahnung, warum das passiert. Die Dokumentation ist genau hier nicht klar (oder fehle ich in Bezug auf die Konfiguration der Warteschlange?)
Bitte helfen!
Hinweis: 1. Meine FIFO-Warteschlange hat immer Nachrichten in diesem Szenario, so gibt es keinen Fall von Queue Null-Nachrichten mit und Anforderung empfangen Null
2. Die Verarbeitung der Rückkehr und löschen Zeiten auch sind Weniger als das Sichtbarkeits-Timeout.
Danke.
Update: ich für die Verarbeitung der FIFO-Warteschlange mehrere Verbraucher laufen begonnen haben. Es ist klar, dass ein Verbraucher den Zustrom von Nachrichten nicht bewältigt. Ich werde in wenigen Tagen aktualisieren, wie sich mehrere Verbraucher verhalten. Danke
Haben Sie darüber nachgedacht, mehrere Threads/Clients zu verwenden, um Nachrichten parallel zu verarbeiten? Könnten Sie das Limit von 300 Transaktionen pro Sekunde (TPS) für FIFO-Warteschlangen erreichen? Haben Sie in Erwägung gezogen, ** langes Polling ** (Nachrichtenwartezeit empfangen) zu verwenden, das nach einer bestimmten Zeit (z. B. 20 Sekunden) nur eine Antwort mit einer Nullnachricht zurückgibt? –
@John Danke für die Antwort. Ja. Ich habe lange Polling versucht, ähnliches Verhalten. Es erhält nicht immer Nachrichten, selbst wenn die Warteschlange mehr als 5000 Nachrichten enthält. Ich versuche gerade mehrere Verbraucher. Aber ich wollte das Verhalten im Allgemeinen verstehen –
Wie viele Nachrichten werden derzeit als ** im Flug ** angezeigt?Eine FIFO-Warteschlange erfordert, dass Sie jede Nachricht korrekt behandeln, und wenn Sie dies nicht tun, werden sie "im Flug" angezeigt. SQS wartet darauf, dass Sie auf sie reagieren oder dass ihre Sichtbarkeitszeit abgelaufen ist. Überprüfen Sie dies? –