Azure Functions はトリガーとバインドを使用して Azure Service Bus と統合されます。 Service Bus と統合すると、キューまたはトピック メッセージに応答して送信する関数を構築できます。
アクション |
タイプ |
Service Bus キューまたはトピック メッセージが作成されたときに関数を実行する |
トリガー |
Azure Service Bus メッセージを送信する |
出力バインド |
拡張機能のインストール
インストールする拡張機能 NuGet パッケージは、関数アプリで使用している C# モードによって異なります。
拡張機能の機能性は、拡張機能のバージョンによって異なります。
トリガーやバインディングを操作するには、適切な NuGet パッケージを参照する必要があります。 NuGet パッケージ バージョン 5.x 未満をインストールします。
NuGet パッケージ バージョン 4.x をインストールすることによって、プロジェクトに拡張機能を追加します。
Functions バージョン 1.x では、分離ワーカー プロセスはサポートされていません。
バンドルのインストール
Service Bus のバインドは、host.json プロジェクト ファイルで指定される拡張機能バンドルの一部です。 このバンドルは、バインドのバージョンを変更するために、またはバンドルがまだインストールされていない場合に変更が必要になることがあります。 詳細については、「拡張機能のバンドル」を参照してください。
このバージョンでは、シークレットではなく ID を使用して接続する機能が導入されています。 マネージド ID を使用して関数アプリを構成するチュートリアルについては、ID ベースの接続を使用した関数アプリの作成に関 するチュートリアルを参照してください。
このバージョンの拡張機能は、host.json
ファイルで次のコードを追加するか、または置き換えることによって、プレビュー拡張機能バンドル v3 から追加できます。
{
"version": "2.0",
"extensionBundle": {
"id": "Microsoft.Azure.Functions.ExtensionBundle",
"version": "[3.3.0, 4.0.0)"
}
}
詳細については、ユーザーの更新に関するページを参照してください。
拡張機能バンドルのバージョン 2.x を登録すると、このバージョンの拡張機能を関数アプリにインストールできます。
Functions 1.x アプリには、拡張機能への参照が自動的に組み込まれます。
バインドの種類
.NET でサポートされるバインドの種類は、拡張機能のバージョンと C# 実行モードの両方によって異なります。これは次のいずれかになります。
分離ワーカー プロセス クラス ライブラリは、ランタイムから分離されたプロセスで実行されるコンパイル済みの C# 関数です。
インプロセス クラス ライブラリは、Functions ランタイムと同じプロセスで実行されるコンパイル済みの C# 関数です。
バージョンを選択すると、モードとバージョンのバインドの種類の詳細が表示されます。
Service Bus 拡張機能では、以下の表に従ってパラメーターの型がサポートされています。
1 JSON データを含むメッセージは、既知の単純な従来の CLR オブジェクト (POCO) 型に逆シリアル化できます。
2 高度なシナリオには、メッセージの解決、セッション、トランザクションが含まれます。 これらの型は、通常のトリガー パラメーターに加えて、個別のパラメーターとして使用できます。
これまでのバージョンの拡張機能では、現在非推奨の Microsoft.Azure.ServiceBus 名前空間から型が公開されていました。
Azure.Messaging.ServiceBus の新しい型は、拡張機能 5.x 以降専用です。
2026 年 9 月 30 日に、Azure SDK ガイドラインに準拠していない Azure Service Bus SDK ライブラリ WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus、および com.microsoft.azure.servicebus は廃止されます。 SBMP プロトコルのサポートも終了するため、2026 年 9 月 30 日以降はこのプロトコルを使用できなくなります。 この日付より前に、重要なセキュリティ更新プログラムと強化された機能が提供される、最新の Azure SDK ライブラリに移行してください。
古いライブラリは 2026 年 9 月 30 日以降も引き続き使用できますが、Microsoft から公式のサポートと更新プログラムは提供されなくなります。 詳細については、サポート廃止のお知らせに関するページを参照してください。
このバージョンの拡張機能では、以下の表に従ってパラメーターの型がサポートされています。
Service Bus 拡張機能では、以下の表に従ってパラメーターの型がサポートされています。
バインドのシナリオ |
パラメーターの種類 |
Service Bus トリガー (単一メッセージ) |
[Microsoft.Azure.ServiceBus.Message]
string
byte[] JSON シリアル化可能な型1 |
Service Bus トリガー (メッセージ バッチ) |
ServiceBusReceivedMessage[]
string[] |
Service Bus トリガーの高度なシナリオ2 |
IMessageReceiver
MessageReceiver
IMessageSession
|
Service Bus 出力 (単一メッセージ) |
メッセージ
string
byte[] JSON シリアル化可能な型1 |
Service Bus 出力 (複数メッセージ) |
ICollector<T> または IAsyncCollector<T> (T は単一メッセージ型の 1 つ)
MessageSender |
1 JSON データを含むメッセージは、既知の単純な従来の CLR オブジェクト (POCO) 型に逆シリアル化できます。
2 高度なシナリオには、メッセージの解決、セッション、トランザクションが含まれます。 これらの型は、通常のトリガー パラメーターに加えて、個別のパラメーターとして使用できます。
Functions 1.x では、非推奨の Microsoft.ServiceBus.Messaging 名前空間から型が公開されていました。
Azure.Messaging.ServiceBus の新しい型は、拡張機能 5.x 以降専用です。 これらを使用するには、アプリケーションを Functions 4.x にアップグレードする必要があります。
2026 年 9 月 30 日に、Azure SDK ガイドラインに準拠していない Azure Service Bus SDK ライブラリ WindowsAzure.ServiceBus、Microsoft.Azure.ServiceBus、および com.microsoft.azure.servicebus は廃止されます。 SBMP プロトコルのサポートも終了するため、2026 年 9 月 30 日以降はこのプロトコルを使用できなくなります。 この日付より前に、重要なセキュリティ更新プログラムと強化された機能が提供される、最新の Azure SDK ライブラリに移行してください。
古いライブラリは 2026 年 9 月 30 日以降も引き続き使用できますが、Microsoft から公式のサポートと更新プログラムは提供されなくなります。 詳細については、サポート廃止のお知らせに関するページを参照してください。
分離ワーカー プロセスでは、以下の表に従ってパラメーターの型がサポートされています。
Service Bus トリガー
関数で 1 つのメッセージを処理する場合、Service Bus トリガーは次の型にバインドできます。
タイプ |
説明 |
string |
文字列としてのメッセージ。 メッセージが単純なテキストである場合に使用します。 |
byte[] |
メッセージのバイト数。 |
JSON シリアル化可能な型 |
イベントに JSON データが含まれている場合、Functions は JSON データを単純な従来の CLR オブジェクト (POCO) 型に逆シリアル化しようとします。 |
ServiceBusReceivedMessage1 |
メッセージ オブジェクト。
ServiceBusReceivedMessage にバインドする場合は、必要に応じて、ServiceBusMessageActions1,2 型のパラメーターを含め、message settlement アクションを実行することもできます。 |
関数でメッセージのバッチを処理するとき、Service Bus トリガーは次の型にバインドできます。
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 クライアントの登録に関するページを参照してください。
分離ワーカー プロセスのこれまでのバージョンの拡張機能では、string
、byte[]
、JSON シリアル化可能な型へのバインドのみがサポートされていました。
拡張機能 5.x 以降では、追加のオプションを使用できます。
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 つのメッセージを受信する関数にのみ適用されます。 |
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
パッケージが必要です。
{
"version": "2.0",
"extensions": {
"serviceBus": {
"prefetchCount": 100,
"messageHandlerOptions": {
"autoComplete": true,
"maxConcurrentCalls": 32,
"maxAutoRenewDuration": "00:05:00"
},
"sessionHandlerOptions": {
"autoComplete": false,
"messageWaitTimeout": "00:00:30",
"maxAutoRenewDuration": "00:55:00",
"maxConcurrentSessions": 16
},
"batchOptions": {
"maxMessageCount": 1000,
"operationTimeout": "00:01:00",
"autoComplete": true
}
}
}
}
isSessionsEnabled
で プロパティまたは属性を true
に設定すると、sessionHandlerOptions
が使用されます。
isSessionsEnabled
で プロパティまたは属性を false
に設定すると、messageHandlerOptions
が使用されます。
プロパティ |
既定値 |
説明 |
prefetchCount |
0 |
メッセージの受信者が同時に要求できるメッセージ数を取得または設定します。 |
maxAutoRenewDuration |
00:05:00 |
メッセージ ロックが自動的に更新される最大間隔。 |
autoComplete |
true |
トリガーが処理後に自動的に complete を呼び出す必要があるか、または関数コードで complete を手動で呼び出すかどうか。
false に設定することは、C# でのみサポートされています。
true に設定すると、関数の実行が正常に完了したときはトリガーによって自動的にメッセージ、セッション、またはバッチが完了され、それ以外のときはメッセージが破棄されます。
false に設定する場合は、自分で ServiceBusReceiver を呼び出して、メッセージ、セッション、またはバッチを完了、破棄、または配信不能にする必要があります。 例外がスローされた場合 (かつ ServiceBusReceiver メソッドが呼び出されなかった場合)、ロックは維持されます。 ロックが期限切れになると、メッセージはキューに再登録されて DeliveryCount はインクリメントされ、ロックは自動的に更新されます。
C# 以外の関数では、関数で例外が発生すると、ランタイムによってバックグラウンドで abandonAsync が呼び出されます。 例外が発生しなかった場合は、バックグラウンドで completeAsync が呼び出されます。 |
maxConcurrentCalls |
16 |
スケーリングされたインスタンスごとにメッセージ ポンプが開始する必要があるコールバックの同時呼び出しの最大数。 既定では、Functions ランタイムは、複数のメッセージを同時に処理します。 |
maxConcurrentSessions |
2000 |
スケーリングされたインスタンスごとに同時に処理できるセッションの最大数。 |
maxMessageCount |
1000 |
トリガーされたときに、関数に送信されるメッセージの最大数。 |
operationTimeout |
00:01:00 |
hh:mm:ss で表される期間の値。 |
次のステップ