次の方法で共有


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)

PowerShell の例は現在使用できません。

属性

分離ワーカー プロセスライブラリとインプロセス C# ライブラリの両方で、RabbitMQTriggerAttributeを使用して関数を定義します。この関数では、属性の特定のプロパティが拡張機能のバージョンによって異なります。

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

パラメーター 説明
キュー名 メッセージを受け取るキューの名前。
HostName このパラメーターはサポートされなくなり、無視されます。 今後のバージョンでは削除される予定です。
ConnectionStringSetting RabbitMQ サーバーの接続文字列を含むアプリ設定の名前。 この設定では、アプリ設定のキー名のみを受け取ります。接続文字列の値を直接設定することはできません。 詳細については、「 接続」を参照してください。
UserNameSetting このパラメーターはサポートされなくなり、無視されます。 今後のバージョンでは削除される予定です。
PasswordSetting このパラメーターはサポートされなくなり、無視されます。 今後のバージョンでは削除される予定です。
ポート 使用されているポートを取得または設定します。 既定値は 0 です。これは、5672 という RabbitMQ クライアントの既定のポート設定を指します。

注釈

RabbitMQTrigger 注釈を使用すると、RabbitMQ メッセージの作成時に実行される関数を作成できます。

注釈は、次の構成オプションをサポートしています。

パラメーター 説明
queueName メッセージを受け取るキューの名前。
connectionStringSetting RabbitMQ サーバーの接続文字列を含むアプリ設定の名前。 この設定では、アプリ設定のキー名のみを受け取ります。接続文字列の値を直接設定することはできません。 詳細については、「 接続」を参照してください。
disableCertificateValidation 証明書の検証を無効にすることを示す true に設定できるブール値。 既定値は、false です。 運用環境ではお勧めしません。 SSL が無効になっている場合は適用されません。

構成

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

function.json のプロパティ 説明
タイプ RabbitMQTrigger に設定する必要があります。
方向 in に設定する必要があります。
名前 関数コード内のキューを表す変数の名前。
queueName メッセージを受け取るキューの名前。
connectionStringSetting RabbitMQ サーバーの接続文字列を含むアプリ設定の名前。 この設定では、アプリ設定のキー名のみを受け取ります。接続文字列の値を直接設定することはできません。 詳細については、「 接続」を参照してください。
disableCertificateValidation 証明書の検証を無効にすることを示す true に設定できるブール値。 既定値は、false です。 運用環境ではお勧めしません。 SSL が無効になっている場合は適用されません。

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

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

使用方法

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

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

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

接続

重要

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

拡張機能のバージョン 2.x 以降では、RabbitMQ サーバーへの接続を定義するために、 hostNameuserNameSetting、および passwordSetting はサポートされなくなりました。 代わりに、 connectionStringSettingを使用する必要があります。

connectionStringSetting プロパティは、アプリ設定のキーと値のペアの名前のみを受け入れます。 バインドで接続文字列の値を直接設定することはできません。

たとえば、バインド定義でconnectionStringSettingrabbitMQConnectionに設定した場合、関数アプリには、amqp://myuser:***@contoso.rabbitmq.example.com:5672Azure Key Vault 参照などの接続値を返す rabbitMQConnection という名前のアプリ設定が必要です。

ローカルで実行する場合は、local.settings.json ファイルで定義connectionStringSettingのキー値も必要です。 それ以外の場合、アプリはローカル コンピューターからサービスに接続できないため、エラーが発生します。

配信不能キュー

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

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

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

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

VNETToggle

Azure CLI では、次のコマンドを使用して ランタイム スケール監視 を有効にすることができます。

az resource update -resource-group <RESOURCE_GROUP> -name <APP_NAME>/config/web \
    --set properties.functionsRuntimeScaleMonitoringEnabled=1 \
    --resource-type Microsoft.Web/sites

RabbitMQ エンドポイントの監視

特定の RabbitMQ エンドポイントのキューと交換を監視するには、次のようにします。

  • RabbitMQ 管理プラグインを有効にする
  • http://{node-hostname}:15672に移動し、ユーザー名とパスワードでログインします。

関連記事