Azure Functions はトリガーとバインドを使用して Azure Service Bus と統合されます。 Service Bus と統合すると、キューまたはトピック メッセージに応答して送信する関数を構築できます。
| アクション | タイプ | 
|---|---|
| Service Bus キューまたはトピック メッセージが作成されたときに関数を実行する | トリガー | 
| Azure Service Bus メッセージを送信する | 出力バインド | 
拡張機能のインストール
インストールする拡張機能 NuGet パッケージは、関数アプリで使用している C# モードによって異なります。
関数は分離された C# ワーカー プロセスで実行されます。 詳しくは、「分離されたワーカー プロセスにおける C# Azure Functions の実行のガイド」をご覧ください。
この NuGet パッケージをインストールして、プロジェクトに拡張機能を追加します。
拡張機能の機能性は、拡張機能のバージョンによって異なります。
このバージョンでは、シークレットではなく ID を使用して接続する機能が導入されています。 マネージド ID を使用して関数アプリを構成するチュートリアルについては、ID ベースの接続を使用した関数アプリの作成に関 するチュートリアルを参照してください。
このバージョンでは、Azure.Messaging.ServiceBus からの型にバインドできます。
このバージョンでは、 .NET Aspire 統合を使用したトリガーとバインドの構成がサポートされています。
NuGet パッケージ バージョン 5.x をインストールすることによって、プロジェクトに拡張機能を追加します。
バンドルのインストール
アプリでこのバインド拡張機能を使用できるようにするには、プロジェクトのルートにある host.json ファイルに次の extensionBundle 参照が含まれていることを確認します。
{
    "version": "2.0",
    "extensionBundle": {
        "id": "Microsoft.Azure.Functions.ExtensionBundle",
        "version": "[4.0.0, 5.0.0)"
    }
}
この例では、versionの[4.0.0, 5.0.0)値は、少なくとも4.0.0が5.0.0未満のバンドル バージョン (4.x のすべての潜在的なバージョンを含む) を使用するように Functions ホストに指示します。 この表記は、v4.x 拡張機能バンドルの利用可能な最新のマイナー バージョンでアプリを効果的に維持します。
可能であれば、最新の拡張機能バンドルメジャー バージョンを使用し、ランタイムが最新のマイナー バージョンを自動的に維持できるようにする必要があります。 最新のバンドルの内容は、 拡張機能バンドルのリリース ページで確認できます。 詳細については、 Azure Functions 拡張機能バンドルに関するページを参照してください。
バインドの種類
.NET でサポートされるバインドの種類は、拡張機能のバージョンと C# 実行モードの両方によって異なります。これは次のいずれかになります。
分離ワーカー プロセス クラス ライブラリは、ランタイムから分離されたプロセスで実行されるコンパイル済みの C# 関数です。
バージョンを選択すると、モードとバージョンのバインドの種類の詳細が表示されます。
分離ワーカー プロセスでは、以下の表に従ってパラメーターの型がサポートされています。
Service Bus トリガー
関数で 1 つのメッセージを処理する場合、Service Bus トリガーは次の型にバインドできます。
| タイプ | 説明 | 
|---|---|
string | 
文字列としてのメッセージ。 メッセージが単純なテキストである場合に使用します。 | 
byte[] | 
メッセージのバイト数。 | 
| JSON シリアル化可能な型 | イベントに JSON データが含まれている場合、Functions は JSON データを単純な従来の CLR オブジェクト (POCO) 型に逆シリアル化しようとします。 | 
| ServiceBusReceivedMessage1 | メッセージ オブジェクト。ServiceBusReceivedMessageにバインドする場合は、必要に応じて、ServiceBusMessageActions1,2 型のパラメーターを含め、message settlement アクションを実行することもできます。 | 
関数でメッセージのバッチを処理するとき、Service Bus トリガーは次の型にバインドできます。
| タイプ | 説明 | 
|---|---|
              T[] (T は単一メッセージ型の 1 つ) | 
バッチのイベントの配列。 各エントリは 1 つのイベントを表します。ServiceBusReceivedMessage[]にバインドする場合は、必要に応じて、ServiceBusMessageActions1,2 型のパラメーターを含め、message settlement アクションを実行することもできます。 | 
1 これらの型を使用するには、Microsoft.Azure.Functions.Worker.Extensions.ServiceBus 5.14.1 以降と SDK 型バインドの一般的な依存関係に関する記事を参照する必要があります。
              2ServiceBusMessageActionsを使用する場合は、トリガー属性のAutoCompleteMessagesプロパティをfalseに設定します。 これにより、関数の呼び出しが成功した後にランタイムがメッセージを完了することを試みなくなります。
Service Bus 出力バインド
関数で 1 つのメッセージを書き込む場合、Service Bus の出力バインドは次の型にバインドできます
| タイプ | 説明 | 
|---|---|
string | 
文字列としてのメッセージ。 メッセージが単純なテキストである場合に使用します。 | 
byte[] | 
メッセージのバイト数。 | 
| JSON シリアル化可能な型 | メッセージを表すオブジェクト。 Functions は、単純な従来の CLR オブジェクト (POCO) 型を JSON データにシリアル化しようとします。 | 
関数で複数のメッセージを書き込む場合、Service Bus の出力バインドは次の型にバインドできます。
| タイプ | 説明 | 
|---|---|
              T[] (T は単一メッセージ型の 1 つ) | 
複数のメッセージを含む配列。 各エントリは 1 つのメッセージを表します。 | 
その他の出力シナリオでは、 ServiceBusClientAzure.Messaging.ServiceBus の他の型 を直接作成して使用します。 依存関係の挿入を使用して Azure SDK からクライアントの種類を作成する例については Azure クライアントの登録に関するページを参照してください。
SDK バインドの種類
Azure Service Bus の SDK の種類はプレビュー段階です。 Service Bus 用の Python SDK バインドのサンプルに従って、Python で Service Bus 用 SDK の種類を使い始めます。
重要
SDK の型バインドを使用するには、 Python v2 プログラミング モデルが必要です。
| バインド | パラメーターの種類 | サンプル | 
|---|---|---|
| ServiceBus トリガー | ServiceBusReceivedMessage | ServiceBusReceivedMessage | 
host.json 設定
このセクションでは、このバインドで使用できる構成設定について説明します。これは、ランタイムと拡張機能のバージョンによって異なります。
{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "clientRetryOptions":{
                "mode": "exponential",
                "tryTimeout": "00:01:00",
                "delay": "00:00:00.80",
                "maxDelay": "00:01:00",
                "maxRetries": 3
            },
            "prefetchCount": 0,
            "transportType": "amqpWebSockets",
            "webProxy": "https://proxyserver:8080",
            "autoCompleteMessages": true,
            "maxAutoLockRenewalDuration": "00:05:00",
            "maxConcurrentCalls": 16,
            "maxConcurrentSessions": 8,
            "maxMessageBatchSize": 1000,
            "minMessageBatchSize": 1,
            "maxBatchWaitTime": "00:00:30",
            "sessionIdleTimeout": "00:01:00",
            "enableCrossEntityTransactions": false
        }
    }
}
この clientRetryOptions の設定は、Service Bus サービスとの対話にのみ適用されます。 関数の実行の再試行には影響しません。 詳細については、「報酬」に関する記事を参照してください。
| プロパティ | 既定値 | 説明 | 
|---|---|---|
| モードの | Exponential | 
再試行の遅延を計算するために使用する方法です。 既定の指数モードでは、再試行の度に待機する時間が増加するバックオフ戦略に基づいて、繰り返し試みられます。 
              Fixed モードでは、固定の間隔で繰り返し試みられ、遅延はそれぞれ一定です。 | 
| tryTimeout | 00:01:00 | 
試行ごとに操作を待機する最大期間です。 | 
| 遅延 | 00:00:00.80 | 
再試行の間に適用する遅延またはバックオフ係数です。 | 
| 最大遅延 | 00:01:00 | 
許容される再試行の間の最大遅延です。 | 
| maxRetries | 3 | 
関連する操作が失敗したと判断するまでの再試行の最大回数です。 | 
| prefetchCount | 0 | 
メッセージの受信者が同時に要求できるメッセージ数を取得または設定します。 | 
| 輸送タイプ | amqpTcp | Service Bus との通信に使用されるプロトコルと転送。 使用可能なオプション: amqpTcp、amqpWebSockets | 
| webProxy | 該当なし | Web ソケット経由の Service Bus との通信に使用されるプロキシ。 
              amqpTcp の転送を指定してプロキシを使用することはできません。 | 
| autoCompleteMessages | true | 
関数の正常な実行後にメッセージを自動的に完了するかどうかを決定します。 | 
| maxAutoLockRenewalDuration | 00:05:00 | 
メッセージ ロックが自動的に更新される最大間隔。 この設定は、一度に 1 つのメッセージを受信する関数にのみ適用され、メッセージのバッチを受信する関数には適用されません。 バッチの場合、Service Bus の最大期間は キューまたはサブスクリプション レベルで設定されます。 | 
| maxConcurrentCalls | 16 | 
既定では、Functions ランタイムは、複数のメッセージを同時に処理します。 この設定では、スケールされたインスタンスごとに開始できるコールバックの同時呼び出しの最大数が制限されます。 ホスティング プランにインスタンスごとに複数のコアがある場合、呼び出しの最大数には実質的にコアの数が乗算されます。 たとえば、2 つのコアを持つハードウェアで実行されるプランでは、 16 の既定の設定は、インスタンスあたりの同時呼び出しの最大数が実際に 32 (または 2 * 16) であることを意味します。 この設定は、isSessionsEnabledの  プロパティまたは属性が false に設定されている場合にのみ使用されます。 この設定は、バッチではなく一度に 1 つのメッセージを受信する関数にのみ適用されます。 | 
| maxConcurrentSessions | 8 | 
スケーリングされたインスタンスごとに同時に処理できるセッションの最大数。 この設定は、isSessionsEnabledの  プロパティまたは属性が true に設定されている場合にのみ使用されます。 この設定は、一度に 1 つのメッセージを受信する関数にのみ適用されます。 | 
| maxMessageBatchSize | 1000 | 
各関数呼び出しに渡されるメッセージの最大数。 これは、メッセージのバッチを受信する関数にのみ適用されます。 | 
| minMessageBatchSize1 | 1 | 
バッチで必要な最小メッセージ数。 最小値は、関数が複数のイベントを受信する場合にのみ適用され、maxMessageBatchSize より小さくする必要があります。 最小サイズは厳密には保証されません。 部分的なバッチは、 maxBatchWaitTime が経過する前に完全なバッチを準備できない場合にディスパッチされます。 | 
| maxBatchWaitTime1 | 00:00:30 | 
関数を呼び出す前に、トリガーがバッチの入力を待機する最大間隔。 待機時間は、minMessageBatchSize が 1 より大きい場合にのみ考慮され、それ以外の場合は無視されます。 待機時間が経過する前に使用可能イベントが minMessageBatchSize 未満の場合、関数は部分的なバッチで呼び出されます。 最長の許容待機時間は、エンティティ メッセージ ロック期間の 50% です。つまり、許可される最大時間は 2 分 30 秒です。 それ以外の場合は、ロック例外が発生する可能性があります。 注: この間隔は、関数が呼び出される正確なタイミングを厳密に保証するものではありません。 タイマーの精度により、わずかな誤差が生じます。  | 
| sessionIdleTimeout | 該当なし | 現在アクティブなセッションでメッセージを受信するまでの最大待機時間。 この時間が経過すると、セッションは閉じられ、関数で別のセッションの処理が試みられます。 | 
| enableCrossEntityTransactions | false | 
Service Bus 名前空間の複数のエンティティにまたがるトランザクションを有効にするかどうかを指定します。 | 
              1minMessageBatchSize と maxBatchWaitTime を使用するには、v5.10.0 以降のバージョンの Microsoft.Azure.WebJobs.Extensions.ServiceBus パッケージが必要です。