Azure Functions の RabbitMQ トリガーの概要
Note
RabbitMQ バインドは、Premium および Dedicated プランでのみ完全にサポートされています。 従量課金はサポートされていません。
RabbitMQ キューからのメッセージに応答するには、RabbitMQ トリガーを使用します。
セットアップと構成の詳細については、概要に関する記事を参照してください。
例
A C# 関数は、次の C# モードのいずれかを使用して作成できます。
- 分離されたワーカー モデル: ランタイムから分離されたワーカー プロセスで実行されるコンパイル済みの C# 関数。 分離ワーカー プロセスは、LTS および 非 LTS バージョンの .NET および .NET Framework で実行されている C# 関数をサポートするために必要です。
- インプロセス モデル: Functions ランタイムと同じプロセスで実行されるコンパイル済みの C# 関数。
- C# スクリプト: Azure portal で C# 関数を作成するときに主に使用されます。
重要
インプロセス モデルのサポートは 2026 年 11 月 10 日に終了します。 完全なサポートのために、分離ワーカー モデルにアプリを移行することを強くお勧めします。
[Function(nameof(RabbitMQFunction))]
[RabbitMQOutput(QueueName = "destinationQueue", ConnectionStringSetting = "RabbitMQConnection")]
public static string Run([RabbitMQTrigger("queue", ConnectionStringSetting = "RabbitMQConnection")] string item,
FunctionContext context)
{
var logger = context.GetLogger(nameof(RabbitMQFunction));
logger.LogInformation(item);
var message = $"Output message created at {DateTime.Now}";
return message;
}
次の Java 関数は、@RabbitMQTrigger
からの @RabbitMQTrigger
注釈を使用して、RabbitMQ キュー トリガーの構成を記述します。 この関数は、キューにあるメッセージを取得し、ログに追加します。
@FunctionName("RabbitMQTriggerExample")
public void run(
@RabbitMQTrigger(connectionStringSetting = "rabbitMQConnectionAppSetting", queueName = "queue") String input,
final ExecutionContext context)
{
context.getLogger().info("Java HTTP trigger processed a request." + input);
}
次の例は、function.json ファイルの RabbitMQ トリガー バインドと、そのバインドが使用される JavaScript スクリプト関数を示しています。 この関数は、RabbitMQ メッセージを読み取り、ログに記録します。
function.json ファイルのバインディング データを次に示します。
{
"bindings": [
{
"name": "myQueueItem",
"type": "rabbitMQTrigger",
"direction": "in",
"queueName": "queue",
"connectionStringSetting": "rabbitMQConnectionAppSetting"
}
]
}
JavaScript スクリプト コードを次に示します。
module.exports = async function (context, myQueueItem) {
context.log('JavaScript RabbitMQ trigger function processed work item', myQueueItem);
};
次の例では、トリガーを使用して RabbitMQ キュー メッセージを読み取る方法を示します。
RabbitMQ のバインドは function.json で定義され、そこで type は RabbitMQTrigger
に設定されます。
{
"scriptFile": "__init__.py",
"bindings": [
{
"name": "myQueueItem",
"type": "rabbitMQTrigger",
"direction": "in",
"queueName": "queue",
"connectionStringSetting": "rabbitMQConnectionAppSetting"
}
]
}
import logging
import azure.functions as func
def main(myQueueItem) -> None:
logging.info('Python RabbitMQ trigger function processed a queue item: %s', myQueueItem)
属性
インプロセスと分離ワーカー プロセスの C# ライブラリはどちらも、 属性を使用して関数を定義します。 C# スクリプトでは、代わりに function.json 構成ファイルを使います。
この属性のコンストラクターは、次のパラメーターを受け取ります。
パラメーター | 説明 |
---|---|
QueueName | メッセージを受け取るキューの名前。 |
HostName | キューのホスト名 (10.26.45.210 など)。 ConnectStringSetting を使う場合は無視されます。 |
UserNameSetting | キューにアクセスするためのユーザー名を含むアプリ設定の名前 (UserNameSetting: "%< UserNameFromSettings >%" など)。 ConnectStringSetting を使う場合は無視されます。 |
PasswordSetting | キューにアクセスするためのパスワードを含むアプリ設定の名前 (PasswordSetting: "%< PasswordFromSettings >%" など)。 ConnectStringSetting を使う場合は無視されます。 |
ConnectionStringSetting | RabbitMQ メッセージ キュー接続文字列を含むアプリ設定の名前。 アプリの設定を使わず、接続文字列を直接指定した場合、トリガーは機能しません。 たとえば、ConnectionStringSetting: "rabbitMQConnection" を設定した場合、local.settings.json と関数アプリの両方で、"RabbitMQConnection" : "< ActualConnectionstring >" のような設定が必要になります。 |
ポート | 使用されているポートを取得または設定します。 既定値は 0 です。これは、5672 という RabbitMQ クライアントの既定のポート設定を指します。 |
C# クラス ライブラリでは、RabbitMQTrigger 属性を使用します。
分離ワーカー プロセス ライブラリのメソッド シグネチャの RabbitMQTrigger
属性は次のとおりです。
[Function(nameof(RabbitMQFunction))]
[RabbitMQOutput(QueueName = "destinationQueue", ConnectionStringSetting = "RabbitMQConnection")]
public static string Run([RabbitMQTrigger("queue", ConnectionStringSetting = "RabbitMQConnection")] string item,
FunctionContext context)
{
注釈
RabbitMQTrigger
注釈を使用すると、RabbitMQ メッセージの作成時に実行される関数を作成できます。
注釈は、次の構成オプションをサポートしています。
パラメーター | 説明 |
---|---|
queueName | メッセージを受け取るキューの名前。 |
hostName | キューのホスト名 (10.26.45.210 など)。 ConnectStringSetting を使う場合は無視されます。 |
userNameSetting | キューにアクセスするためのユーザー名を含むアプリ設定の名前 (UserNameSetting: "%< UserNameFromSettings >%" など)。 ConnectStringSetting を使う場合は無視されます。 |
passwordSetting | キューにアクセスするためのパスワードを含むアプリ設定の名前 (PasswordSetting: "%< PasswordFromSettings >%" など)。 ConnectStringSetting を使う場合は無視されます。 |
connectionStringSetting | RabbitMQ メッセージ キュー接続文字列を含むアプリ設定の名前。 アプリの設定を使わず、接続文字列を直接指定した場合、トリガーは機能しません。 たとえば、ConnectionStringSetting: "rabbitMQConnection" を設定した場合、local.settings.json と関数アプリの両方で、"RabbitMQConnection" : "< ActualConnectionstring >" のような設定が必要になります。 |
port | 使用されているポートを取得または設定します。 既定値は 0 です。これは、5672 という RabbitMQ クライアントの既定のポート設定を指します。 |
構成
次の表は、function.json ファイルで設定したバインド構成のプロパティを説明しています。
function.json のプロパティ | 説明 |
---|---|
type | RabbitMQTrigger に設定する必要があります。 |
direction | in に設定する必要があります。 |
name | 関数コード内のキューを表す変数の名前。 |
queueName | メッセージを受け取るキューの名前。 |
hostName | キューのホスト名 (10.26.45.210 など)。 connectStringSetting を使う場合は無視されます。 |
userNameSetting | キューにアクセスするためのユーザー名を含むアプリ設定の名前 (UserNameSetting: "%< UserNameFromSettings >%" など)。 connectStringSetting を使う場合は無視されます。 |
passwordSetting | キューにアクセスするためのパスワードを含むアプリ設定の名前 (PasswordSetting: "%< PasswordFromSettings >%" など)。 connectStringSetting を使う場合は無視されます。 |
connectionStringSetting | RabbitMQ メッセージ キュー接続文字列を含むアプリ設定の名前。 アプリの設定を使わず、接続文字列を直接指定した場合、トリガーは機能しません。 たとえば、connectionStringSetting: "rabbitMQConnection" を設定した場合、local.settings.json と関数アプリの両方で、"rabbitMQConnection" : "< ActualConnectionstring >" のような設定が必要になります。 |
port | 使用されているポートを取得または設定します。 既定値は 0 です。これは、5672 という RabbitMQ クライアントの既定のポート設定を指します。 |
ローカルで開発する場合は、Values
コレクション内の local.settings.json ファイルにアプリケーション設定を追加します。
完全な例については、セクションの例を参照してください。
使用方法
RabbitMQ トリガーでサポートされるパラメーターの型は、使う C# のモダリティによって異なります。
現在、RabbitMQ のバインドは、分離プロセス内で実行する場合、文字列とシリアル化可能なオブジェクト型のみをサポートしています。
完全な例については、C# の例を参照してください。
Java の注釈を参照してください。
キュー メッセージは、context.bindings.<NAME>
を介して使用できます。この <NAME>
は function.json で定義されている名前と一致します。 ペイロードが JSON の場合、値はオブジェクトに逆シリアル化されます。
Python の例を参照してください。
配信不能キュー
配信不能キューと交換は、RabbitMQ トリガーから制御または構成することはできません。 配信不能キューを使用するには、RabbitMQ のトリガーによって使用されるキューを事前に構成します。 RabbitMQ のドキュメントを参照してください。
host.json 設定
このセクションでは、バージョン 2.x 以降でこのバインドに使用可能な構成設定について説明します。 host.json ファイルの設定は、関数アプリ インスタンスのすべての関数に適用されます。 次の host.json ファイルの例には、このバインドのバージョン 2.x 以降の設定のみが含まれています。 バージョン 2.x 以降のバージョンでの関数アプリ構成設定の詳細については、「Azure Functions の host.json のリファレンス」を参照してください。
{
"version": "2.0",
"extensions": {
"rabbitMQ": {
"prefetchCount": 100,
"queueName": "queue",
"connectionString": "amqp://user:password@url:port",
"port": 10
}
}
}
プロパティ | Default | 説明 |
---|---|---|
prefetchCount | 30 | メッセージの受信者が同時に要求およびキャッシュできるメッセージ数を取得または設定します。 |
queueName | 該当なし | メッセージを受信するキューの名前です。 |
connectionString | 該当なし | RabbitMQ メッセージ キューの接続文字列。 接続文字列は、アプリ設定ではなく、ここで直接指定します。 |
port | 0 | (connectionString を使用する場合は無視されます) 使用されるポートを取得または設定します。 既定値は 0 です。これは rabbitmq クライアントの既定のポート設定 5672 を指します。 |
ローカル テスト
Note
connectionString は、"hostName"、"userName"、および "password" よりも優先されます。 これらがすべて設定されている場合、connectionString によって他の 2 つがオーバーライドされます。
接続文字列を使用せずにローカルでテストする場合は、該当する場合、host.json の "rabbitMQ" セクションで、"hostName" 設定と "userName" および "password" を設定する必要があります。
{
"version": "2.0",
"extensions": {
"rabbitMQ": {
...
"hostName": "localhost",
"username": "userNameSetting",
"password": "passwordSetting"
}
}
}
プロパティ | Default | 説明 |
---|---|---|
hostName | 該当なし | (connectionString を使用している場合は無視されます) キューのホスト名 (例:10.26.45.210) |
userName | 該当なし | (connectionString を使用している場合は無視されます) キューにアクセスするための名前 |
password | 該当なし | (connectionString を使用している場合は無視されます) キューにアクセスするためのパスワード |
ランタイム スケールを有効にする
RabbitMQ トリガーを複数のインスタンスにスケールアウトするには、ランタイム スケールの監視設定を有効にする必要があります。
ポータルでは、この設定はご利用の関数アプリの [構成]>[関数のランタイム設定] の下で見つけることができます。
CLI では、次のコマンドを使用して、ランタイム スケールの監視を有効にすることができます。
az resource update -g <resource_group> -n <function_app_name>/config/web --set properties.functionsRuntimeScaleMonitoringEnabled=1 --resource-type Microsoft.Web/sites
RabbitMQ エンドポイントの監視
特定の RabbitMQ エンドポイントのキューと交換を監視するには、次のようにします。
- RabbitMQ 管理プラグインを有効にする
- http://{node-hostname}:15672 にアクセスし、ユーザー名とパスワードを使用してログインします。