Ich habe ein Python-Skript, das die Boto-Bibliothek auf einer EC2-Instanz verwendet, die Teil einer Autoscaling-Gruppe ist. Das Skript verarbeitet 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
Macht es Sinn, die while-Anweisung zu verwenden? Wird count() in Echtzeit aktualisiert, wenn:
- andere Instanzen Nachrichten aus der Warteschlange abrufen (oder werde ich sie doppelt erhalten)
- neue Nachrichten zur Warteschlange hinzugefügt werden (oder werde ich sie verpassen?)
Wie kann ich dieses Skript dazu bringen, ständig nach neuen Hinzufügungen zur Warteschlange zu lauschen, selbst wenn die Warteschlange leer ist?
In dieser Frage Verarbeitung von Elementen in der SQS-Warteschlange mit einem PHP-Skript wurde erwähnt, dass die 'sqs ruby client library' eine Methode "poll" hat, die die Warteschlange kontinuierlich abfragt und bei Empfang einer Nachricht in der Warteschlange diese an einen Block weitergibt. Gibt es einen äquivalenten Ansatz in Python?
Es wurde auch vorgeschlagen, dass SNS verwendet werden könnte, um die Skripts über den Status der Warteschlange zu informieren, aber ich sehe nicht, wie man ein reaktionsfähiges System mit SNS konfigurieren könnte, da die Metrik-Alarme nicht feinkörnig genug sind.