Python 用Azure Service Bus クライアント ライブラリ - バージョン 7.11.4
Azure Service Busは、分散送信者と受信側の間でリアルタイムでフォールト トレラントな通信を提供するための、高パフォーマンスのクラウド管理メッセージング サービスです。
Service Bus には、構造化された先入れ先出しメッセージング、パブリッシュ/サブスクライブ機能、ニーズの拡大に合わせて簡単にスケーリングする機能など、非同期の信頼性の高い通信のための複数のメカニズムが用意されています。
Python 用 Service Bus クライアント ライブラリを使用して、アプリケーションとサービス間で通信し、非同期メッセージング パターンを実装します。
- Service Bus 名前空間、キュー、トピック、サブスクリプションを作成し、それらの設定を変更します。
- Service Bus チャネル内でメッセージを送受信します。
- メッセージ ロック、セッション、配信不能機能を利用して、複雑なメッセージング パターンを実装します。
ソースコード | パッケージ (PyPi) | パッケージ (Conda) | API リファレンス ドキュメント | 製品ドキュメント | サンプル | Changelog
注: バージョン 0.50 以降を使用していて、このパッケージの最新バージョンに移行する場合は、 Service Bus V0.50 から Service Bus V7 に移行するための移行ガイドを参照してください。
作業の開始
パッケージをインストールする
pip を使用して Python 用のAzure Service Bus クライアント ライブラリをインストールします。
pip install azure-servicebus
前提条件:
このパッケージを使用するには、次が必要です。
- Azure サブスクリプション - 無料アカウントを作成できます
- Azure Service Bus - 名前空間と管理資格情報
- Python 3.7 以降 - Python をインストールする
Azure Service Bus 名前空間が必要な場合は、 Azure Portal を使用して作成できます。 グラフィカル ポータル UI を使用しない場合は、Cloud Shell経由で Azure CLI を使用するか、Azure CLI をローカルで実行して、次の Azure CLI コマンドを使用して作成できます。
az servicebus namespace create --resource-group <resource-group-name> --name <servicebus-namespace-name> --location <servicebus-namespace-location>
クライアントを認証する
Service Bus との対話は、 クラスの ServiceBusClient
インスタンスから始まります。 クライアント オブジェクトをインスタンス化するには、SAS キーを持つ接続文字列、または名前空間とそのアカウント キーのいずれかが必要です。
いずれかの方法で認証する方法のデモについては、以下にリンクされているサンプルを参照してください。
接続文字列からクライアントを作成する
- 必要な資格情報を取得するには、リンクされたサンプルの上部にある Azure CLI スニペット (Bash シェル用に書式設定) を使用して、環境変数にサービス バス 接続文字列を設定します (サービス バス 接続文字列の取得に関する詳細なガイドに従って、Azure Portal でこれらの値を見つけることもできます)。
azure-identity ライブラリを使用してクライアントを作成します。
- このコンストラクターは、Service Bus インスタンスの完全修飾名前空間と 、TokenCredential プロトコルを実装する資格情報を受け取ります。 azure-identity パッケージで使用できるプロトコルの実装
TokenCredential
があります。 完全修飾名前空間の形式<yournamespace.servicebus.windows.net>
は です。 - によって
azure-identity
提供される資格情報の種類を使用するには、パッケージをインストールしてください。pip install azure-identity
- さらに、非同期 API を使用するには、まず、 などの
aiohttp
非同期トランスポートをインストールする必要があります。pip install aiohttp
- Azure Active Directory を使用する場合は、Azure Service Bus データ所有者ロールなど、Service Bus へのアクセスを許可するロールがプリンシパルに割り当てられている必要があります。 Service Bus で Azure Active Directory 承認を使用する方法の詳細については、 関連するドキュメントを参照してください。
注: クライアントはコンテキスト マネージャーなしで初期化できますが、リソースをリークしないように client.close() を介して手動で閉じる必要があります。
主要な概念
を初期化 ServiceBusClient
したら、Service Bus 名前空間内のプライマリ リソースの種類とやり取りできます。その中には、複数のリソースが存在し、実際のメッセージ転送が実行される名前空間があり、多くの場合、アプリケーション コンテナーとして機能します。
キュー: メッセージの送受信を許可します。 多くの場合、ポイントツーポイント通信に使用されます。
トピック: キューとは対照的に、トピックは発行/サブスクライブのシナリオに適しています。 トピックはに送信できますが、使用するサブスクリプションが必要です。このサブスクリプションには複数の並列が存在する可能性があります。
サブスクリプション: トピックから使用するメカニズム。 各サブスクリプションは独立しており、トピックに送信された各メッセージのコピーを受信します。 ルールとフィルターを使用して、特定のサブスクリプションで受信するメッセージを調整できます。
これらのリソースの詳細については、「Azure Service Busとは」を参照してください。
これらのリソースを操作するには、次の SDK の概念をよく理解している必要があります。
ServiceBusClient: これは、Service Bus 名前空間に接続するためにユーザーが最初に初期化する必要があるオブジェクトです。 キュー、トピック、またはサブスクリプションを操作するには、このクライアントから送信者または受信者を生成します。
ServiceBusSender: キューまたはトピックにメッセージを送信するには、次に示すように、インスタンスの対応する メソッドまたは
get_topic_sender
メソッドをServiceBusClient
使用しますget_queue_sender
。ServiceBusReceiver: キューまたはサブスクリプションからメッセージを受信するには、次に示すように、インスタンスの対応する
get_queue_receiver
メソッドまたはget_subscription_receiver
メソッドをServiceBusClient
使用します。ServiceBusMessage: 送信時に、これはペイロードを格納するために構築する型です。 受信すると、ここでペイロードにアクセスします。
スレッド セーフ
ServiceBusClient、ServiceBusSender、ServiceBusReceiver がスレッド セーフであることを保証するものではありません。 スレッド間でこれらのインスタンスを再利用することはお勧めしません。 これらのクラスをスレッド セーフな方法で使用するのは、実行中のアプリケーション次第です。
例
次のセクションでは、次のような最も一般的な Service Bus タスクをカバーするいくつかのコード スニペットを示します。
- キューにメッセージを送信する
- キューからメッセージを受信する
- セッションが有効なキューからのメッセージの送受信
- トピックとサブスクリプションの操作
- 受信後にメッセージを決済する
- するメッセージ ロックまたはセッション ロックを自動的に更新する
キュー/トピック/サブスクリプションの作成と削除などの管理タスクを実行するには、 こちらの azure-mgmt-servicebus ライブラリを利用してください。
送信、受信、セッション管理、メッセージ処理などの一般的な Service Bus シナリオを示す サンプル ディレクトリの例を参照してください。
メッセージをキューに送信する
この例では、Azure portal または az コマンドを使用して作成された、既に存在していると見なされるキューに、単一のメッセージとメッセージの配列を送信します。
from azure.servicebus import ServiceBusClient, ServiceBusMessage
import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']
with ServiceBusClient.from_connection_string(connstr) as client:
with client.get_queue_sender(queue_name) as sender:
# Sending a single message
single_message = ServiceBusMessage("Single message")
sender.send_messages(single_message)
# Sending a list of messages
messages = [ServiceBusMessage("First message"), ServiceBusMessage("Second message")]
sender.send_messages(messages)
メモ: メソッドを使用
ServiceBusSender.schedule_messages()
するか、 を呼び出す前に をServiceBusMessage.scheduled_enqueue_time_utc
指定して、メッセージの配信が遅延されるようにスケジュールできますServiceBusSender.send_messages()
スケジュール設定とスケジュールの取り消しの詳細については、 こちらのサンプルを参照してください。
キューからメッセージを受信する
キューから受信するには、 を介して receiver.receive_messages()
アドホック受信を実行するか、受信側自体を介して永続的に受信することができます。
ServiceBusReceiver を反復処理してキューからメッセージを受信する
from azure.servicebus import ServiceBusClient
import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']
with ServiceBusClient.from_connection_string(connstr) as client:
# max_wait_time specifies how long the receiver should wait with no incoming messages before stopping receipt.
# Default is None; to receive forever.
with client.get_queue_receiver(queue_name, max_wait_time=30) as receiver:
for msg in receiver: # ServiceBusReceiver instance is a generator.
print(str(msg))
# If it is desired to halt receiving early, one can break out of the loop here safely.
メモ: で受信した
receive_mode=PEEK_LOCK
メッセージ (これは既定で、受信時にキューからメッセージを直ちに削除RECEIVE_AND_DELETE) にはロックがあり、処理にロック期間よりも長い時間がかかる場合は、有効期限が切れる前に を介してreceiver.renew_message_lock
更新する必要があります。 これをバックグラウンドで自動的に実行するヘルパーについては、「 の AutoLockRenewer を自動的に更新する」を参照してください。 ロック期間は、キューまたはトピック自体で Azure で設定されます。
ServiceBusReceiver.receive_messages() を介してキューからメッセージを受信する
メモ:
ServiceBusReceiver.receive_messages()
は、ジェネレーターから永続的に受信するのではなく、アドホック メソッド呼び出しを介してメッセージの単一または制約付きリストを受信します。 常にリストを返します。
from azure.servicebus import ServiceBusClient
import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']
with ServiceBusClient.from_connection_string(connstr) as client:
with client.get_queue_receiver(queue_name) as receiver:
received_message_array = receiver.receive_messages(max_wait_time=10) # try to receive a single message within 10 seconds
if received_message_array:
print(str(received_message_array[0]))
with client.get_queue_receiver(queue_name) as receiver:
received_message_array = receiver.receive_messages(max_message_count=5, max_wait_time=10) # try to receive maximum 5 messages in a batch within 10 seconds
for message in received_message_array:
print(str(message))
この例では、max_message_countは、秒単位で指定されたmax_wait_timeに達するまでに受信を試行するメッセージの最大数を宣言します。
メモ: また、ピークされる
ServiceBusReceiver.peek_messages()
メッセージがロックされないため、受信とは微妙に異なる点に注意する必要があります。
セッションが有効なキューからのメッセージの送受信
セッションでは、キューまたはサブスクリプションの上に先入れ先出しセマンティクスと単一受信側セマンティクスが提供されます。 実際の受信構文は同じですが、初期化は若干異なります。
from azure.servicebus import ServiceBusClient, ServiceBusMessage
import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_SESSION_QUEUE_NAME']
session_id = os.environ['SERVICE_BUS_SESSION_ID']
with ServiceBusClient.from_connection_string(connstr) as client:
with client.get_queue_sender(queue_name) as sender:
sender.send_messages(ServiceBusMessage("Session Enabled Message", session_id=session_id))
# If session_id is null here, will receive from the first available session.
with client.get_queue_receiver(queue_name, session_id=session_id) as receiver:
for msg in receiver:
print(str(msg))
注: セッションから受信したメッセージは、セッション以外の受信者のようにロックを更新する必要はありません。代わりに、ロック管理は、更新可能なセッション ロックを使用してセッション レベルで行われます
receiver.session.renew_lock()
トピックとサブスクリプションの操作
トピックとサブスクリプションは、メッセージを送受信するためのキューの代わりに使用できます。 詳細とキューとの違いについては、 こちらの ドキュメントを参照してください。
from azure.servicebus import ServiceBusClient, ServiceBusMessage
import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
topic_name = os.environ['SERVICE_BUS_TOPIC_NAME']
subscription_name = os.environ['SERVICE_BUS_SUBSCRIPTION_NAME']
with ServiceBusClient.from_connection_string(connstr) as client:
with client.get_topic_sender(topic_name) as sender:
sender.send_messages(ServiceBusMessage("Data"))
# If session_id is null here, will receive from the first available session.
with client.get_subscription_receiver(topic_name, subscription_name) as receiver:
for msg in receiver:
print(str(msg))
受信後にメッセージを決済する
キューから受信する場合は、受信したメッセージに対して複数のアクションを実行できます。
注: 受け取ったオブジェクトは、モードでのみ
ServiceBusReceiveMode.PEEK_LOCK
決済ServiceBusReceivedMessage
できます (これがデフォルトです)。ServiceBusReceiveMode.RECEIVE_AND_DELETE
mode は、受信時にキューからメッセージを削除します。ServiceBusReceivedMessage
からpeek_messages()
返されたメッセージは、前述の受信メソッドのようにメッセージ ロックが取得されないため、解決できません。
上記のようにメッセージにロックがある場合、メッセージ ロックの有効期限が切れている場合、受け取りは失敗します。
処理にロック期間より長い時間がかかる場合は、有効期限が切れる前に を介して receiver.renew_message_lock
保持する必要があります。
ロック期間は、キューまたはトピック自体で Azure で設定されます。
これをバックグラウンドで自動的に実行するヘルパーについては、「 の AutoLockRenewer を自動的に更新する」を参照してください。
完了
メッセージ処理が正常に完了することを宣言し、キューからメッセージを削除します。
from azure.servicebus import ServiceBusClient
import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']
with ServiceBusClient.from_connection_string(connstr) as client:
with client.get_queue_receiver(queue_name) as receiver:
for msg in receiver:
print(str(msg))
receiver.complete_message(msg)
Abandon
しばらくの間、メッセージの処理を中止し、メッセージをキューに直ちに戻して、別の (または同じ) 受信者が受け取ります。
from azure.servicebus import ServiceBusClient
import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']
with ServiceBusClient.from_connection_string(connstr) as client:
with client.get_queue_receiver(queue_name) as receiver:
for msg in receiver:
print(str(msg))
receiver.abandon_message(msg)
DeadLetter
メッセージをプライマリ キューから特別な "配信不能サブキュー" に転送します。このサブキューには、 パラメーターsub_queue=ServiceBusSubQueue.DEAD_LETTER
を指定した 関数をServiceBusClient.get_<queue|subscription>_receiver
使用してアクセスし、他の受信者と同様に使用できます。 ( こちらのサンプルを参照してください)
from azure.servicebus import ServiceBusClient
import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']
with ServiceBusClient.from_connection_string(connstr) as client:
with client.get_queue_receiver(queue_name) as receiver:
for msg in receiver:
print(str(msg))
receiver.dead_letter_message(msg)
延期
遅延は、以前の決済方法とは微妙に異なります。 これにより、 の呼び出しでシーケンス番号でメッセージを受信する必要があるため、キューからメッセージが直接受信されるのを ServiceBusReceiver.receive_deferred_messages
防ぎます ( こちらのサンプルを参照してください)。
from azure.servicebus import ServiceBusClient
import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']
with ServiceBusClient.from_connection_string(connstr) as client:
with client.get_queue_receiver(queue_name) as receiver:
for msg in receiver:
print(str(msg))
receiver.defer_message(msg)
メッセージ ロックまたはセッション ロックを自動的に更新する
注:自動ロック更新のリファレンス ドキュメントを参照してください。
AutoLockRenewer
は、呼び出し receiver.renew_message_lock
/receiver.session.renew_lock
が実用的でない場合や望ましくない場合に、メッセージまたはセッションが長期間にわたってロックされたままであることを確認するための簡単な方法です。
内部的には、オブジェクトの有効期限が近づいている場合にロックの更新を行う同時実行ウォッチドッグを作成することは、それほど簡単ではありません。
次のように使用する必要があります。
- メッセージ ロックの自動更新
from azure.servicebus import ServiceBusClient, AutoLockRenewer
import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
queue_name = os.environ['SERVICE_BUS_QUEUE_NAME']
# Can also be called via "with AutoLockRenewer() as renewer" to automate closing.
renewer = AutoLockRenewer()
with ServiceBusClient.from_connection_string(connstr) as client:
with client.get_queue_receiver(queue_name) as receiver:
for msg in receiver.receive_messages():
renewer.register(receiver, msg, max_lock_renewal_duration=60)
# Do your application logic here
receiver.complete_message(msg)
renewer.close()
- セッション ロックの自動更新
from azure.servicebus import ServiceBusClient, AutoLockRenewer
import os
connstr = os.environ['SERVICE_BUS_CONNECTION_STR']
session_queue_name = os.environ['SERVICE_BUS_SESSION_QUEUE_NAME']
session_id = os.environ['SERVICE_BUS_SESSION_ID']
# Can also be called via "with AutoLockRenewer() as renewer" to automate closing.
renewer = AutoLockRenewer()
with ServiceBusClient.from_connection_string(connstr) as client:
with client.get_queue_receiver(session_queue_name, session_id=session_id) as receiver:
renewer.register(receiver, receiver.session, max_lock_renewal_duration=300) # Duration for how long to maintain the lock for, in seconds.
for msg in receiver.receive_messages():
# Do your application logic here
receiver.complete_message(msg)
renewer.close()
何らかの理由で自動更新が中断または失敗した場合は、更新されるオブジェクトの プロパティを使用 auto_renew_error
するか、または更新時に パラメーターにコールバックを on_lock_renew_failure
渡すことによって確認できます。
また、指定したオブジェクトに対してアクション (メッセージの完了など) を実行しようとしたときにも表示されます。
トラブルシューティング
ログ記録
- ロガーを有効
azure.servicebus
にして、ライブラリからトレースを収集します。 - 基になる uAMQP ライブラリからトレースを収集するためのロガーを有効にします
uamqp
。 - クライアントの作成時に を設定
logging_enable=True
して、AMQP フレーム レベルのトレースを有効にします。 - ログ記録が冗長すぎると考える
uamqp
場合があります。 不要なログ記録を抑制するには、次のスニペットをコードの先頭に追加します。
import logging
# The logging levels below may need to be changed based on the logging that you want to suppress.
uamqp_logger = logging.getLogger('uamqp')
uamqp_logger.setLevel(logging.ERROR)
# or even further fine-grained control, suppressing the warnings in uamqp.connection module
uamqp_connection_logger = logging.getLogger('uamqp.connection')
uamqp_connection_logger.setLevel(logging.ERROR)
Timeouts
ユーザーがライブラリ内で認識する必要があるさまざまなタイムアウトがあります。
- 10 分間のサービス側リンクのクローズ: 開いたリンクは、リソースの漏洩からサービスを保護するために 10 分アイドル状態の後に閉じられます。 これはユーザーに対してほとんど透過的である必要がありますが、このような期間が経過した後に再接続が発生する場合は、これが理由です。 リンクに対して管理操作を含むすべての操作を実行すると、このタイムアウトが延長されます。
- max_wait_time: 受信側の作成時または を呼び出
receive_messages()
すときに提供され、その後のメッセージの受信時間は、トラフィックが発生しなかった後に停止します。 これは、命令型receive_messages()
関数と、メッセージがない場合に終了する前にジェネレーター スタイルの受信が実行される長さの両方に適用されます。 None (既定値) を渡すと、他のアクションが実行されない場合、10 分のしきい値まで永遠に待機します。
メモ:メッセージまたはセッションの処理がタイムアウトを引き起こすのに十分な時間がある場合は、手動で呼び出す
receiver.renew_message_lock
/receiver.session.renew_lock
代わりに、上記の「する」の詳細な機能を利用AutoLockRenewer
できます。
一般的な例外
Service Bus API は、azure.servicebus.exceptions で次の例外を生成します。
- ServiceBusConnectionError: サービスへの接続中にエラーが発生しました。 これは、一時的なネットワークの問題またはサービスの問題が原因である可能性があります。 再試行することをお勧めします。
- ServiceBusAuthorizationError: サービスへの接続を承認するときにエラーが発生しました。 これは、資格情報に操作を実行するための適切なアクセス許可が付与されていないことが原因である可能性があります。 資格情報のアクセス許可をチェックすることをお勧めします。
- ServiceBusAuthenticationError: サービスへの接続を認証するときにエラーが発生しました。 これは、資格情報が正しくないことです。 資格情報をチェックすることをお勧めします。
- OperationTimeoutError: これは、サービスが予想される時間内に操作に応答しなかったことを示します。 これは、一時的なネットワークの問題またはサービスの問題が原因である可能性があります。 サービスが要求を正常に完了した場合と完了していない可能性があります。状態が不明です。 現在の状態を確認し、必要に応じて再試行することをお勧めします。
- MessageSizeExceededError: これは、メッセージの内容が Service Bus フレーム サイズよりも大きいことを示します。
これは、バッチで送信される Service Bus メッセージが多すぎる場合や、 の本文
Message
に渡されるコンテンツが大きすぎる場合に発生する可能性があります。 バッチで送信されるメッセージの数や、1 つのServiceBusMessage
に渡されるコンテンツのサイズを減らすことをお勧めします。 - MessageAlreadySettled: これは、メッセージの解決に失敗したことを示します。 これは、既に解決済みのメッセージを解決しようとしたときに発生する可能性があります。
- MessageLockLostError: メッセージのロックが期限切れになり、キューに解放されました。
解決するには、もう一度受け取る必要があります。
メッセージのロック期間に注意し、処理時間が長い場合は有効期限前にロックを更新し続ける必要があります。
AutoLockRenewer
は、メッセージのロックを自動的に更新し続けるのに役立ちます。 - SessionLockLostError: セッションのロックの有効期限が切れています。
受信したすべての未解決メッセージは解決できなくなります。
必要に応じてメッセージを再び受信する場合は、セッションに再接続することをお勧めします。
長い処理時間が発生した場合は、セッションのロック期間に注意し、有効期限の前にロックを更新し続ける必要があります。
AutoLockRenewer
は、セッションのロックを自動的に更新し続けるのに役立ちます。 - MessageNotFoundError: 特定のシーケンス番号を持つメッセージの受信を試みます。 このメッセージが見つかりません。 メッセージがまだ受信されていないことを確認します。 配信不能キューを確認し、メッセージが配信不能になっているかどうかを確かめます。
- MessagingEntityNotFoundError: 操作に関連付けられているエンティティが存在しないか、削除されています。 エンティティが存在することを確認してください。
- MessagingEntityDisabledError: 無効なエンティティに対するランタイム操作の要求。 エンティティをアクティブ化してください。
- ServiceBusQuotaExceededError: メッセージング エンティティが許容される最大サイズに達したか、名前空間への接続の最大数を超えました。 エンティティまたはそのサブキューからメッセージを受信して、エンティティ内に領域を作成します。
- ServiceBusServerBusyError: 現時点では、サービスは要求を処理できません。 クライアントは、しばらく待機してから操作をやり直すことができます。
- ServiceBusCommunicationError: クライアントは Service Bus への接続を確立できません。 指定されたホスト名が正しく、ホストが到達可能なことを確認してください。 ファイアウォール/プロキシを使用している環境でコードを実行する場合は、Service Bus のドメイン/IP アドレスとポートへのトラフィックがブロックされていないことを確認します。
- SessionCannotBeLockedError: 特定のセッション ID を持つセッションへの接続を試みますが、現在、セッションは別のクライアントによってロックされています。 別のクライアントによるセッションのロックが解除されたことを確認します。
- AutoLockRenewFailed: バックグラウンドでメッセージまたはセッションのロックを更新できませんでした。
これは、 によって
AutoLockRenewer
使用されるレシーバーが閉じているか、更新可能なロックの有効期限が切れている場合に発生する可能性があります。 メッセージを受信するか、セッションフル エンティティに再度接続して、再生可能なメッセージまたはセッションを再登録することをお勧めします。 - AutoLockRenewTimeout: メッセージまたはセッション ロックを更新するために割り当てられた時間が経過しました。 自動ロックを更新するオブジェクトを再登録するか、事前にタイムアウトを延長することができます。
- ServiceBusError: その他すべての Service Bus 関連のエラー。 上記のすべてのエラーのルート エラー クラスです。
一般的な例外の種類の詳細については、 例外のリファレンス ドキュメント を参照してください。
次のステップ
その他のサンプル コード
送信、受信、セッション管理、メッセージ処理などの一般的な Service Bus シナリオを示す サンプル ディレクトリの例を参照してください。
その他のドキュメント
Service Bus サービスに関するより広範なドキュメントについては、docs.microsoft.com に関する Service Bus のドキュメントを参照してください 。
管理機能とドキュメント
ServiceBus に対して管理操作 (キューやトピックの作成、フィルター規則の変更、エンティティの列挙など) を実行しようとしているユーザーについては、API ドキュメントの azure-mgmt-servicebus ドキュメント を参照してください。 Terse の使用例については、 こちらも参照 してください。
純粋な Python AMQP トランスポートと下位互換性のサポート
Azure Service Bus クライアント ライブラリは、純粋な Python AMQP 実装に基づいています。 uAMQP
が必要な依存関係として削除されました。
基になるトランスポートとして を使用 uAMQP
するには:
- pip を使用してインストール
uamqp
します。
$ pip install uamqp
- クライアントの構築中に渡します
uamqp_transport=True
。
from azure.servicebus import ServiceBusClient
connection_str = '<< CONNECTION STRING FOR THE SERVICE BUS NAMESPACE >>'
queue_name = '<< NAME OF THE QUEUE >>'
client = ServiceBusClient.from_connection_string(
connection_str, uamqp_transport=True
)
注: message
以前にServiceBusMessageBatch
//ServiceBusMessage
ServiceBusReceivedMessage
を公開していた uamqp.Message
の 属性は非推奨になりました。
属性によって message
返される "レガシ" オブジェクトは、遷移を容易にするために導入されました。
ソースからの uAMQP ホイールの構築
azure-servicebus
は、AMQP プロトコル実装の uAMQP に依存します。
uAMQP ホイールは、ほとんどの主要なオペレーティング システムに提供され、 をインストールするときに自動的にインストール azure-servicebus
されます。
uAMQP が の基になる AMQP プロトコル実装azure-servicebus
として使用されることを意図している場合は、ほとんどの主要なオペレーティング システムで uAMQP ホイールを見つけることができます。
uAMQP ホイールが提供されていないプラットフォームで実行している場合は、次の手順に uAMQP
従ってください。uAMQP ホイールが提供されていないプラットフォームで実行している場合は、 uAMQP インストール ガイダンスに従ってソースからインストールしてください。
共同作成
このプロジェクトでは、共同作成と提案を歓迎しています。 ほとんどの共同作成では、共同作成者使用許諾契約書 (CLA) にご同意いただき、ご自身の共同作成内容を使用する権利を Microsoft に供与する権利をお持ちであり、かつ実際に供与することを宣言していただく必要があります。 詳細については、 https://cla.microsoft.com を参照してください。
pull request を送信すると、CLA を提供して PR (ラベル、コメントなど) を適宜装飾する必要があるかどうかを CLA ボットが自動的に決定します。 ボットによって提供される手順にそのまま従ってください。 この操作は、Microsoft の CLA を使用するすべてのリポジトリについて、1 回だけ行う必要があります。
このプロジェクトでは、Microsoft オープン ソースの倫理規定を採用しています。 詳しくは、「Code of Conduct FAQ (倫理規定についてよくある質問)」を参照するか、opencode@microsoft.com 宛てに質問またはコメントをお送りください。
Azure SDK for Python