次の方法で共有


Azure Functions の RabbitMQ トリガーの概要

RabbitMQ キューからのメッセージに応答するには、RabbitMQ トリガーを使用します。

RabbitMQ バインドは、 Elastic Premium および Dedicated (App Service)) プランでのみ完全にサポートされます。 Flex Consumption および Consumption プランはまだサポートされていません。

RabbitMQ バインドは、Azure Functions v1.x ランタイムではサポートされていません。

セットアップと構成の詳細については、概要に関するページをご覧ください。

C# 関数は、次のいずれかの C# モードを使用して作成できます。

  • 分離されたワーカー モデル: ランタイムから分離されたワーカー プロセスで実行されるコンパイル済みの C# 関数。 .NET および .NET Framework の長期サポート (LTS) および LTS 以外のバージョンで実行されている C# 関数をサポートするには、分離ワーカー プロセスが必要です。
  • インプロセス モデル: Azure Functions ランタイムと同じプロセスで実行されるコンパイル済み C# 関数。
  • C# スクリプト: Azure portal で C# 関数を作成するときに主に使用されます。
[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 で定義され、そこで typeRabbitMQTrigger に設定されます。

{​​
    "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 構成ファイルを使います。

この属性のコンストラクターは、次のパラメーターを受け取ります。

パラメーター 説明
キュー名 メッセージを受け取るキューの名前。
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 >" のような設定が必要になります。
ポート 使用されているポートを取得または設定します。 既定値は 0 です。これは、5672 という RabbitMQ クライアントの既定のポート設定を指します。

構成

次の表は、function.json ファイルで設定したバインド構成のプロパティを説明しています。

function.json のプロパティ 説明
タイプ RabbitMQTrigger に設定する必要があります。
方向 in に設定する必要があります。
名前 関数コード内のキューを表す変数の名前。
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 クライアントの既定のポート設定を指します。

ローカルで開発する場合は、 コレクション内の Valuesにアプリケーション設定を追加します。

完全な例については、セクションの例を参照してください。

使用方法

重要

RabbitMQ バインドでは、Microsoft Entra 認証とマネージド ID はサポートされていません。 Azure Key Vault を使用して RabbitMQ 接続文字列を一元管理できます。 詳細については、「 Manage Connections」を参照してください。

RabbitMQ トリガーでサポートされるパラメーターの型は、使う C# のモダリティによって異なります。

現在、RabbitMQ のバインドは、分離プロセス内で実行する場合、文字列とシリアル化可能なオブジェクト型のみをサポートしています。

完全な例については、C# のを参照してください。

Java の注釈を参照してください。

キュー メッセージは、context.bindings.<NAME> を介して使用できます。この <NAME> は function.json で定義されている名前と一致します。 ペイロードが JSON の場合、値はオブジェクトに逆シリアル化されます。

Python のを参照してください。

配信不能キュー

配信不能キューと交換は、RabbitMQ トリガーから制御または構成することはできません。 配信不能キューを使用するには、RabbitMQ のトリガーによって使用されるキューを事前に構成します。 RabbitMQ のドキュメントを参照してください。

host.json 設定

このセクションでは、バージョン 2.x 以降でこのバインドに使用できる構成設定について説明します。 host.json ファイルの設定は、関数アプリ インスタンスのすべての関数に適用されます。 関数アプリの構成設定の詳細については、 Azure Functions のhost.json リファレンスを参照してください。

{
    "version": "2.0",
    "extensions": {
        "rabbitMQ": {
            "prefetchCount": 100,
            "queueName": "queue",
            "connectionString": "amqp://user:password@url:port",
            "port": 10
        }
    }
}
プロパティ 既定値 説明
prefetchCount 30 メッセージの受信者が同時に要求およびキャッシュできるメッセージ数を取得または設定します。
キュー名 該当なし メッセージを受信するキューの名前です。
コネクションストリング 該当なし RabbitMQ メッセージ キューの接続文字列。 接続文字列は、アプリ設定ではなく、ここで直接指定します。
0 (connectionString を使用する場合は無視されます) 使用されるポートを取得または設定します。 既定値は 0 です。これは rabbitmq クライアントの既定のポート設定 5672 を指します。

ローカル テスト

connectionString は、"hostName"、"userName"、および "password" よりも優先されます。 これらがすべて設定されている場合、connectionString によって他の 2 つがオーバーライドされます。

接続文字列を使用せずにローカルでテストする場合は、該当する場合、host.json の "rabbitMQ" セクションで、"hostName" 設定と "userName" および "password" を設定する必要があります。

{
    "version": "2.0",
    "extensions": {
        "rabbitMQ": {
            ...
            "hostName": "localhost",
            "username": "userNameSetting",
            "password": "passwordSetting"
        }
    }
}
プロパティ 既定値 説明
ホスト名 該当なし (connectionString を使用している場合は無視されます)
キューのホスト名 (例:10.26.45.210)
ユーザー名 該当なし (connectionString を使用している場合は無視されます)
キューにアクセスするための名前
パスワード 該当なし (connectionString を使用している場合は無視されます)
キューにアクセスするためのパスワード

ランタイム スケールを有効にする

RabbitMQ トリガーを複数のインスタンスにスケールアウトするには、ランタイム スケールの監視設定を有効にする必要があります。

ポータルでは、この設定はご利用の関数アプリの [構成]>[関数のランタイム設定] の下で見つけることができます。

VNETToggle

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 にアクセスし、ユーザー名とパスワードを使用してログインします。

次のステップ