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:
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.
>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 .
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 .
Tags und Links python amazon-web-services boto amazon-sqs