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)