SQSではメッセージは10件までしか取得することはできない。
そのため、メッセージを全部取得する場合には、取得した10件のメッセージを取得するAPIをループで叩いて取得する必要がある。
また、SQSから取り出したメッセージは明示的に削除する必要があり、取り出したメッセージは処理中のメッセージとなり、取りだすることができないメッセージとなる。削除をしない場合、一定時間経過すると、取り出すことができるようになる。
ちなみにあ、処理中のメッセージは、SQS – 編集 – 可視性タイムアウト情報の設定を変更することで調整可能。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
import boto3 def get_all_messages_from_sqs( queue_url, max_messages=10, wait_time_seconds=20, ): sqs_client = boto3.client("sqs") all_messages = [] while True: response = sqs_client.receive_message( QueueUrl=queue_url, MaxNumberOfMessages=max_messages, WaitTimeSeconds=wait_time_seconds, ) # メッセージがなくなったら終了 messages = response.get("Messages") if not messages: break # メッセージを追加 all_messages.extend(messages) # メッセージを削除(削除しない場合はコメントアウト) entries = [ {"Id": msg["MessageId"], "ReceiptHandle": msg["ReceiptHandle"]} for msg in messages ] sqs_client.delete_message_batch(QueueUrl=queue_url, Entries=entries) return all_messages # Usage queue_url = "QUE_URL" messages = get_all_messages_from_sqs(queue_url) # メッセージを表示 for message in messages: print(message["ReceiptHandle"]) |