Le traitement des files d'attente SQS avec boto
J'ai un script python en utilisant le nom de boto bibliothèque instance ec2 qui fait partie d'une mise à l'échelle automatique de groupe. Le script traite les messages d'une file d'attente SQS:
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
Fait à l'aide de l'instruction while sens? N'count() mise à jour en temps réel:
- d'autres cas, les messages de la file d'attente (ou vais-je double up)
- de nouveaux messages sont ajoutés à la file d'attente (ou vais-je manquer?)
Comment puis-je faire ce script rester constamment à l'écoute pour de nouveaux ajouts à la file d'attente, même si la file d'attente est vide?
Dans cette question Le traitement des éléments dans la file d'attente SQS avec un script php il a été mentionné que " sqs ruby bibliothèque client a une méthode "sondage" qui interroge en permanence la file d'attente et sur la réception d'un message dans la file d'attente passe à un bloc". Est-il un équivalent en Python?
Il a également été suggéré que le réseau social pourrait être utilisé pour notifier les scripts de la file d'attente de messages, mais je ne vois pas comment vous pouvez configurer un système réactif avec SNS comme la métrique alarmes ne sont pas à grain fin assez.
nop désolé, je n'ai vu dans la question ci-dessus.
La caisse SNS - il est préférable de pousser puis à tirer. et ils travaillent très bien ensemble docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html
OriginalL'auteur waigani | 2012-06-21
Vous devez vous connecter pour publier un commentaire.
Vous ne devriez pas compter sur le dénombrement d'une file d'attente comme il est uniquement destiné à fournir un nombre approximatif et n'est pas garanti pour être exact.
Si vous voulez juste garder de vote pour toujours, il suffit de faire ceci:
J'ai ajouté l'appel à temps.le sommeil, pour introduire un retard dans la boucle. La valeur de N doit être d'au moins une seconde et pourrait être beaucoup plus, en fonction de la façon dont rapidement vous attendre de nouveaux messages apparaissent dans votre file d'attente. Si vous ne mettez pas une sorte de retard dans la boucle, vous aurez probablement commencer à se étranglé par le service.
Pour éviter un message d'entrer à lire plusieurs fois, vous devriez essayer d'ajuster la visibilité délai d'attente de la file d'attente à une valeur plus grande que le temps qu'il vous faut pour traiter un message, puis assurez-vous de supprimer le message lorsque le traitement est terminé.
OriginalL'auteur garnaat
Exemple:
OriginalL'auteur raulfortes
Si vous voulez en constante interrogation de la file d'attente, essayez ce qui est appelé Le Temps D'Interrogation - vous pouvez avoir un sondage pour un maximum de 20 secondes qui retourne lorsque la file d'attente est remplie.
Espère que c'est utile, sinon, promenez-vous autour de la boto sqs la documentation.
OriginalL'auteur tyleha