これには少なくとも2つの方法があります。
botoでメッセージを読むと、Messageオブジェクトまたはそのサブクラスが表示されます。 MessageオブジェクトはSQSが知っているすべてのメッセージ属性を含むdictである「属性」フィールドを持っています。 SQSが追跡することの1つは、メッセージが読み取られた回数の概算値です。したがって、この値を使用してメッセージを削除するかどうかを判断できますが、値の「概算」の性質に慣れていなければなりません。
また、メッセージIDをある種のデータベースに記録し、メッセージを読むたびにデータベースのカウントフィールドを増やすことができます。これは、メッセージが単一のプロセス内で常に読み取られている場合や、プロセス間で読み取り値を記録する必要がある場合はSimpleDBのように行うことができる場合は、単純なPython dictで行うことができます。
希望に役立ちます。
ここではいくつかのサンプルコードです:
>>> 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'}
>>>
ご返信ありがとうございます。私はbotoのドキュメントをスキミングしましたが、メッセージの受信カウントを得る手がかりを見つけることができませんでした。それがどこにあるか知っていますか?ところで、単純なローカルデータベースを持つことは、この問題を管理する私の別の方法ですが、まずは可能な限り受信カウントを得るように、単純にしておきたいと思います。 – huzeyfe
構文例を追加できますか?私が何度もメッセージを読んで、message_instance.attributesを見ると、私が見つけたのは空の辞書です。 – tponthieux