Istnieje co najmniej kilka sposobów na zrobienie tego.
Po przeczytaniu wiadomości w boto, otrzymasz obiekt Message lub jego podklasę. Obiekt Message ma pole "attributes", które jest dyktando zawierającym wszystkie atrybuty wiadomości znane przez SQS. Jedna ze ścieżek SQS to przybliżona liczba razy, gdy wiadomość została przeczytana. Tak więc możesz użyć tej wartości, aby określić, czy wiadomość ma zostać usunięta, czy nie, ale musisz mieć pewność, że wartość jest "przybliżona".
Można również zapisać identyfikator wiadomości w bazie danych i zwiększyć pole licznika w bazie danych przy każdym odczytaniu wiadomości. Można to zrobić za pomocą prostego polecenia Pythona, jeśli wiadomości są zawsze odczytywane w ramach jednego procesu lub można to zrobić w sposób podobny do SimpleDB, jeśli trzeba rejestrować odczyty między procesami.
Nadzieję, że pomaga.
Oto niektóre przykładowy kod:
>>> 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'}
>>>
dzięki za odpowiedź. Przeszukałem dokumentację boto, ale nie znalazłem żadnej wskazówki, aby uzyskać liczbę otrzymanych wiadomości. Czy wiesz gdzie to jest? Przy okazji posiadanie prostej lokalnej bazy danych to mój alternatywny sposób zarządzania tym problemem, ale najpierw chciałbym, aby było to proste - jak uzyskiwanie odliczeń - jeśli to możliwe .. – huzeyfe
Czy możesz dodać przykład składni? Wszystko, co znajduję, to pusty słownik, gdy czytam wiadomość więcej niż jeden raz i patrzę na message_instance.attributes. – tponthieux