Verarbeitung von SQS-Warteschlangen mit Boto

8

Ich habe ein Python-Skript, das die Boto-Bibliothek auf der ec2-Instanz verwendet, die Teil einer Autoscaling-Gruppe ist. Das Skript verarbeitet Nachrichten aus einer SQS-Warteschlange:

%Vor%

Macht die while-Anweisung Sinn? Zählt count () in Echtzeit als:

  1. andere Instanzen nehmen Nachrichten aus der Warteschlange (oder verdopple ich)
  2. Neue Nachrichten werden zur Warteschlange hinzugefügt (oder vermisse ich sie?)

Wie lasse ich dieses Skript ständig auf neue Einträge in der Warteschlange warten, auch wenn die Warteschlange leer ist?

In dieser Frage Verarbeitung von Elementen in der SQS-Warteschlange mit einem PHP Skript wurde erwähnt, dass 'sqs ruby ​​client library eine Methode "poll" hat, die ständig die Warteschlange abfragt und beim Empfang einer Nachricht in der Warteschlange sie an einen Block weiterleitet'. Gibt es ein Äquivalent in Python?

Es wurde auch vorgeschlagen, dass der SNS verwendet werden könnte, um die Skripte über den Nachrichtenwarteschlangenstatus zu benachrichtigen, aber ich sehe nicht, wie Sie ein reagierendes System mit SNS konfigurieren könnten, da die Metrikalarme nicht fein genug sind.

>     
waigani 21.06.2012, 04:58
quelle

3 Antworten

6

Sie sollten sich nicht auf die Anzahl für eine Warteschlange verlassen, da diese nur eine ungefähre Anzahl liefert und nicht garantiert genau ist.

Wenn Sie nur für immer weiter pollen wollen, tun Sie das einfach:

%Vor%

Ich habe den Aufruf von time.sleep hinzugefügt, um eine Verzögerung in der Schleife einzuführen. Der Wert von N sollte mindestens eine Sekunde betragen und erheblich höher sein, je nachdem, wie schnell Sie erwarten, dass neue Nachrichten in Ihrer Warteschlange angezeigt werden. Wenn Sie die Schleife nicht verzögern, werden Sie wahrscheinlich vom Dienst gedrosselt.

Um zu vermeiden, dass eine Nachricht mehrfach gelesen wird, sollten Sie versuchen, das Sichtbarkeits-Timeout der Warteschlange auf einen Wert größer als die Verarbeitungszeit einer Nachricht einzustellen und anschließend sicherzustellen, dass die Nachricht nach Abschluss der Verarbeitung gelöscht wird .

    
garnaat 21.06.2012, 13:06
quelle
3
  1. Wenn Sie eine Nachricht von SQS abrufen, wird die Nachricht für andere Warteschlangenabfragen unsichtbar und nicht erreichbar (Bearbeitung - Unsichtbarkeit kann zwischen 0 und 12 Stunden eingestellt werden).
  2. Sie müssen die Warteschlange jedes Mal erneut aufrufen, wenn neue Nachrichten hinzugefügt werden, aber das sollte kein Problem sein - deshalb gibt es den Warteschlangen-Dienst an erster Stelle.

Wenn Sie die Warteschlange ständig abfragen möchten, versuchen Sie, was heißt Langes Polling - Sie können eine fortlaufende Abfrage für bis zu 20 Sekunden durchführen, die nach dem Auffüllen der Warteschlange zurückgegeben wird.

Ich hoffe, das ist hilfreich, sonst stöbern Sie in der Dokumentation nach .

    
tyleha 14.11.2012 18:38
quelle
2

Beispiel:

%Vor%     
raulfortes 08.01.2016 19:01
quelle