Es gibt mindestens ein paar Möglichkeiten, dies zu tun.
Wenn Sie eine Nachricht in Boto lesen, erhalten Sie ein Nachrichtenobjekt oder eine Unterklasse davon. Das Nachrichtenobjekt hat ein Feld "Attribute", das ein Dict ist, das alle von SQS bekannten Nachrichtenattribute enthält. Eines der Dinge, die SQS verfolgt, ist die ungefähre Anzahl der Male, die die Nachricht gelesen wurde. Sie können diesen Wert also verwenden, um zu bestimmen, ob die Nachricht gelöscht werden soll oder nicht, aber Sie müssen mit der "ungefähren" Art des Werts vertraut sein.
Alternativ können Sie Nachrichten-IDs in einer Datenbank speichern und jedes Mal, wenn Sie die Nachricht lesen, ein Zählfeld in der Datenbank inkrementieren. Dies könnte in einem einfachen Python-Diktat erfolgen, wenn die Nachrichten immer in einem einzigen Prozess gelesen werden oder in etwas wie SimpleDB, wenn Sie Messwerte über Prozesse hinweg erfassen müssen.
Hoffe, dass hilft.
Hier einige Beispiel-Code:
>>> import boto.sqs
>>> c = boto.sqs.connect_to_region()
>>> q = c.lookup('myqueue')
>>> messages = c.receive_message(q, num_messages=1, attributes='All')
>>> messages[0].attributes
{u'ApproximateFirstReceiveTimestamp': u'1365474374620',
u'ApproximateReceiveCount': u'2',
u'SenderId': u'419278470775',
u'SentTimestamp': u'1365474360357'}
>>>
danke für Ihre Antwort. Ich habe die Boto-Dokumentation überflogen, konnte aber keine Anhaltspunkte dafür finden, wie viele Nachrichten empfangen wurden. Weißt du, wo es ist? Übrigens ist es eine alternative Möglichkeit, dieses Problem zu lösen, indem ich eine einfache lokale Datenbank verwalte. Aber zuerst möchte ich es einfach halten - wie wenn ich empfangen würde. – huzeyfe
Können Sie ein Syntaxbeispiel hinzufügen? Alles, was ich finde, ist ein leeres Wörterbuch, wenn ich eine Nachricht mehr als einmal lese und auf message_instance.atattributes schaue. – tponthieux