次の方法で共有


Python バージョン 2 クライアント ライブラリを使用する Azure Queue Storage のコード サンプル

この記事では、Python 用の Azure Queue Storage クライアント ライブラリのバージョン 2 を使用するコード サンプルを示します。

2023 年 3 月 31 日に、現在の Azure SDK ガイドラインに準拠していない Azure SDK ライブラリのサポートは廃止されました。 新しい Azure SDK ライブラリは、一貫したエクスペリエンスを促進し、セキュリティ態勢を強化するために定期的に更新されます。 新しい機能と重要なセキュリティ更新を利用するために、新しい Azure SDK ライブラリに移行することをお勧めします。

以前のライブラリは 2023 年 3 月 31 日以降も引き続き使用できますが、Microsoft から公式のサポートと更新情報は提供されなくなります。 詳細については、サポート廃止のお知らせに関するページを参照してください。

最新バージョンの 12.x クライアント ライブラリ バージョンを使用するコード サンプルについては、「クイック スタート: Python 用 Azure Queue Storage クライアント ライブラリ」を参照してください。

キューを作成する

次の import ディレクティブを追加します。

from azure.storage.queue import (
        QueueService,
        QueueMessageFormat
)

次のコードは、ストレージ接続文字列を使用して QueueService オブジェクトを作成します。

# Retrieve the connection string from an environment
# variable named AZURE_STORAGE_CONNECTION_STRING
connect_str = os.getenv("AZURE_STORAGE_CONNECTION_STRING")

# Create a unique name for the queue
queue_name = "queue-" + str(uuid.uuid4())

# Create a QueueService object which will
# be used to create and manipulate the queue
print("Creating queue: " + queue_name)
queue_service = QueueService(connection_string=connect_str)

# Create the queue
queue_service.create_queue(queue_name)

Azure のキュー メッセージはテキストとして格納されます。 バイナリ データを格納する場合は、キューにメッセージを配置する前に、Base64 エンコードおよびデコード関数を設定します。

Queue Storage オブジェクトで Base64 エンコードおよびデコード関数を構成します。

# Setup Base64 encoding and decoding functions
queue_service.encode_function = QueueMessageFormat.binary_base64encode
queue_service.decode_function = QueueMessageFormat.binary_base64decode

メッセージをキューに挿入する

キューにメッセージを挿入するには、put_message メソッドを使用し、新しいメッセージを作成してキューに追加します。

message = u"Hello, World"
print("Adding message: " + message)
queue_service.put_message(queue_name, message)

メッセージをピークする

peek_messages メソッドを呼び出せば、メッセージをキューから削除せずにピークできます。 既定では、このメソッドは 1 つのメッセージを対象としてピークします。

messages = queue_service.peek_messages(queue_name)

for peeked_message in messages:
    print("Peeked message: " + peeked_message.content)

キューに配置されたメッセージの内容を変更する

次のコードでは、update_message メソッドを使用してメッセージを更新します。 表示のタイムアウトは 0 に設定されています。これは、メッセージが即時に表示され、コンテンツが更新されることを示します。

messages = queue_service.get_messages(queue_name)

for message in messages:
    queue_service.update_message(
        queue_name, message.id, message.pop_receipt, 0, u"Hello, World Again")

キューの長さを取得する

get_queue_metadata メソッドからは、approximate_message_count を含む、キューのプロパティが返されます。

metadata = queue_service.get_queue_metadata(queue_name)
count = metadata.approximate_message_count
print("Message count: " + str(count))

サービスが要求に応答した後にメッセージが追加または削除される可能性があるため、取得される結果はおおよその数を示しているだけです。

メッセージをデキューする

get_messages を呼び出すと、既定では、キュー内に次のメッセージが取得されます。 get_messages から返されたメッセージは、このキューからメッセージを読み取る他のコードから参照できなくなります。 既定では、このメッセージを参照できない状態は 30 秒間続きます。 また、キューからのメッセージの削除を完了するには、delete_message を呼び出す必要があります。

messages = queue_service.get_messages(queue_name)

for message in messages:
    print("Deleting message: " + message.content)
    queue_service.delete_message(queue_name, message.id, message.pop_receipt)

キューからのメッセージの取得をカスタマイズする方法は 2 つあります。 1 つ目の方法では、(最大 32 個の) メッセージのバッチを取得できます。 2 つ目の方法では、コードで各メッセージを完全に処理できるように、非表示タイムアウトの設定を長くまたは短くすることができます。

次のコード例では、get_messages メソッドを使用して、1 回の呼び出しで 16 個のメッセージを取得します。 その後、for ループを使用して、各メッセージを処理します。 また、各メッセージの非表示タイムアウトを 5 分に設定します。

messages = queue_service.get_messages(queue_name, num_messages=16, visibility_timeout=5*60)

for message in messages:
    print("Deleting message: " + message.content)
    queue_service.delete_message(queue_name, message.id, message.pop_receipt)

キューを削除する

キューおよびキューに含まれているすべてのメッセージを削除するには、delete_queue メソッドを呼び出します。

print("Deleting queue: " + queue_name)
queue_service.delete_queue(queue_name)