Bearbeitung SQS-Warteschlangen mit boto
Ich habe ein python-Skript mit Hilfe der boto-Bibliothek, die auf ec2-Instanz ist Teil eines autoskalierender Gruppe. Das Skript verarbeitet die Nachrichten aus einer SQS-Warteschlange:
import boto
from boto.sqs.message import Message
conn = boto.connect_sqs()
q = conn.create_queue('queue-name')
while (qin.count() > 0):
m = q.get_messages()
#do something with the message
Beinhaltet die Verwendung der while-Anweisung Sinn machen? Tut count() in Echtzeit aktualisiert, wie:
- andere Instanzen, die Nachrichten aus der Warteschlange (oder bin ich zu double up)
- neuen Nachrichten werden der Warteschlange Hinzugefügt (oder ich verpasse Sie?)
Wie Mach ich das Skript ständig hören für Ergänzungen der Warteschlange, obwohl die queue leer ist?
In dieser Frage Verarbeitung der Elemente in der SQS queue mit einem php-Skript es wurde erwähnt, dass " sqs-ruby client-Bibliothek verfügt über eine Methode "Umfrage", die kontinuierlich Umfragen der Warteschlange und auf den Empfang einer Nachricht in der Warteschlange geht es auf zu einem block'. Gibt es ein äquivalent in Python?
Es wurde auch vorgeschlagen, dass die SNS verwendet werden könnten, zu Benachrichtigen, die Skripte der message-queue-status, aber ich sehe nicht, wie Sie können für ein reaktionsschnelles system mit SNS als Metrik-Alarme sind nicht fein genarbtem genug.
- Sie wissen, welche ruby-Bibliothek? Ich würde gerne einen Blick drauf werfen
- nop, sorry, ich sah nur, dass es in der Frage oben verlinkten.
- Kasse SNS - es ist besser zu schieben, dann zu ziehen. und Sie arbeiten wirklich gut zusammen docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie sich nicht darauf verlassen, dass die Zählung für eine Warteschlange, wie es nur dazu gedacht, um eine Ungefähre Anzahl und wird nicht garantiert genau zu sein.
Wenn Sie wollen einfach nur halten polling für immer, nur dazu:
Habe ich den Aufruf von Zeit.schlafen die Einführung einer Verzögerung in der Schleife. Der Wert von N sollte mindestens eine Sekunde und könnte deutlich mehr, je nachdem, wie schnell Sie erwarten, dass neue Nachrichten erscheinen in Ihrer Warteschlange. Wenn Sie nicht setzen eine Art von Verzögerung in der Schleife, werden Sie wahrscheinlich anfangen, gedrosselt durch den service.
Vermeiden Sie eine Nachricht mehrmals gelesen haben, sollten Sie versuchen, passen Sie die timeout für Sichtbarkeit der Warteschlange auf einen Wert größer als die Zeit, die es braucht um eine Nachricht zu verarbeiten, und dann stellen Sie sicher, dass Sie die Nachricht löschen, wenn die Verarbeitung abgeschlossen hat.
Beispiel:
Wenn Sie wollen, ständig Fragen die Warteschlange versuchen, was heißt Long Polling - Sie können eine kontinuierliche Umfrage für bis zu 20 Sekunden, kehrt zurück, wenn die queue gefüllt ist.
Hoffe, das ist hilfreich, sonst stochern, um die boto sqs Dokumentation.