株式会社ヴァンデミックシステム

Blog

<スポンサーリンク>

SQSではメッセージは10件までしか取得することはできない。
そのため、メッセージを全部取得する場合には、取得した10件のメッセージを取得するAPIをループで叩いて取得する必要がある。
また、SQSから取り出したメッセージは明示的に削除する必要があり、取り出したメッセージは処理中のメッセージとなり、取りだすることができないメッセージとなる。削除をしない場合、一定時間経過すると、取り出すことができるようになる。

ちなみにあ、処理中のメッセージは、SQS – 編集 – 可視性タイムアウト情報の設定を変更することで調整可能。

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"])

<スポンサーリンク>

コメントを残す

Allowed tags:  you may use these HTML tags and attributes: <a href="">, <strong>, <em>, <h1>, <h2>, <h3>
Please note:  all comments go through moderation.

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)