Có ít nhất một vài cách để thực hiện việc này.
Khi bạn đọc thư trong boto, bạn nhận được một đối tượng Thư hoặc một số phân lớp của thư đó. Đối tượng Message có một trường "attributes" là một dict chứa tất cả các thuộc tính message được SQS biết đến. Một trong những điều SQS là số lần gần đúng của thông điệp đã được đọc. Vì vậy, bạn có thể sử dụng giá trị này để xác định xem thư có bị xóa hay không nhưng bạn sẽ phải thoải mái với tính chất "gần đúng" của giá trị.
Ngoài ra, bạn có thể ghi lại ID thư trong một số loại cơ sở dữ liệu và tăng trường đếm trong cơ sở dữ liệu mỗi khi bạn đọc thư. Điều này có thể được thực hiện trong một dict Python đơn giản nếu các thông điệp luôn được đọc trong một quá trình duy nhất hoặc nó có thể được thực hiện trong một cái gì đó như SimpleDB nếu bạn cần ghi lại các bài đọc trên các quy trình.
Hy vọng điều đó sẽ hữu ích.
Dưới đây là một số mã ví dụ:
>>> 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'}
>>>
cảm ơn câu trả lời của bạn. Tôi đã lướt qua tài liệu boto nhưng không thể tìm thấy bất kỳ đầu mối nào để nhận được số lượng tin nhắn. Bạn có biết nó ở đâu không? Bằng cách có một cơ sở dữ liệu cục bộ đơn giản là cách thay thế của tôi trong việc quản lý vấn đề này nhưng trước tiên tôi muốn giữ nó đơn giản giống như nhận được số đếm - nếu có thể .. – huzeyfe
Bạn có thể thêm một ví dụ cú pháp không? Tất cả những gì tôi tìm thấy là một từ điển trống khi tôi đọc một tin nhắn nhiều hơn một lần và nhìn vào message_instance.attributes. – tponthieux