Comment obtenir des messages à recevoir le comte dans Amazon SQS à l'aide de boto bibliothèque en Python?
Je suis en utilisant boto bibliothèque Python pour obtenir des messages Amazon SQS. Dans des cas exceptionnels, je n'ai pas supprimer les messages de la file d'attente afin de donner une couple d'autres modifications afin de récupérer des échecs temporaires. Mais je ne veux pas continuer à recevoir de l'échec des messages en permanence. Ce que je voudrais faire est de supprimer les messages après avoir reçu plus de 3 fois ou n'obtiennent pas de message si recevoir plus de 3.
Quelle est la façon la plus élégante de le faire?
Vous devez vous connecter pour publier un commentaire.
Il y a au moins un couple de façons de le faire.
Lorsque vous lisez un message dans boto, vous recevez un Message d'objet ou de certains sous-classe de celle-ci. L'objet du Message a un "attributs" champ qui est un dictionnaire contenant tous les attributs de message connue par la SQS. L'une des choses SQS pistes est approximativement le nombre de fois que le message a été lu. Ainsi, vous pouvez utiliser cette valeur pour déterminer si le message doit être supprimé ou non, mais vous devez être à l'aise avec le "approximative" de la nature de la valeur.
Alternativement, vous pouvez enregistrer l'ID du message est dans une sorte de base de données et incrémenter un nombre de champ dans la base de données chaque fois que vous lisez le message. Cela pourrait être fait par un simple Python dict si les messages sont toujours en cours de lecture au sein d'un processus unique, ou il pourrait être fait quelque chose comme SimpleDB si vous avez besoin d'enregistrer des lectures sur des processus.
Espère que ça aide.
Voici un exemple de code:
Autre façon peut-être vous pouvez mettre un extra identifiant à la fin du message dans la file d'attente SQS. Cet identifiant peut tenir le compte du nombre de fois que le message a été lu.
Aussi, si vous voulez que votre service ne doit pas poll ces message encore et encore, alors vous pouvez créer une plus de file d'attente de dire "Morts Message de la File d'attente" et permet de transférer le message qui a franchi le seuil de cette file d'attente.
aws a un support intégré pour cela, il suffit de suivre les étapes ci-dessous:
Comment il fonctionne, c'est, chaque fois qu'un message est reçu par le travailleur, le recevoir incrémentent. Une fois qu'il atteint le "plafond Reçoit" le comte, le message est poussé à la lettre morte de la file d'attente. Remarque, même si vous ouvrez le message via la console aws, le recevoir incrémentent.
Source À l'aide d'Amazon SQS Lettre Morte les Files d'attente
Il devrait être fait en quelques étapes.
sqsconnrec = SQSConnection(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY)
request_q = sqsconnrec.create_queue("nom_file")
messages= request_q.get_messages()
il suffit de ne len(messages)
devrait fonctionner comme un charme.
Obtenir ApproximateReceiveCount attribut de message que vous lisez.
le déplacer vers une autre file d'attente(que vous pouvez gérer les messages d'erreur) ou tout simplement le supprimer.