次の方法で共有


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# 関数を作成するときに主に使用されます。
[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 構成ファイルを使います。

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

パラメーター 説明
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 トリガーを複数のインスタンスにスケールアウトするには、ランタイム スケールの監視設定を有効にする必要があります。

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

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

次のステップ