次の方法で共有


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 関数は、@RabbitMQOutput からの @RabbitMQOutput 注釈を使用して、RabbitMQ キュー出力バインディングの構成を記述します。 この関数は、5 分ごとに TimerTrigger によってトリガーされたときに RabbitMQ キューにメッセージを送信します。

@FunctionName("RabbitMQOutputExample")
public void run(
@TimerTrigger(name = "keepAliveTrigger", schedule = "0 */5 * * * *") String timerInfo,
@RabbitMQOutput(connectionStringSetting = "rabbitMQConnectionAppSetting", queueName = "hello") OutputBinding<String> output,
final ExecutionContext context) {
    output.setValue("Some string");
}

次の例は、function.json ファイルの RabbitMQ 出力バインドと、そのバインドを使用する JavaScript 関数を示しています。 この関数は、HTTP トリガーからメッセージを読み取り、RabbitMQ キューに出力します。

function.json ファイルのバインディング データを次に示します。

{
    "bindings": [
        {
            "type": "httpTrigger",
            "direction": "in",
            "authLevel": "function",
            "name": "input",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "rabbitMQ",
            "name": "outputMessage",
            "queueName": "outputQueue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting",
            "direction": "out"
        }
    ]
}

JavaScript コードを次に示します。

module.exports = async function (context, input) {
    context.bindings.outputMessage = input.body;
};

次の例は、function.json ファイルの RabbitMQ 出力バインドと、そのバインドを使用する Python 関数を示しています。 この関数は、HTTP トリガーからメッセージを読み取り、RabbitMQ キューに出力します。

function.json ファイルのバインディング データを次に示します。

{
    "scriptFile": "__init__.py",
    "bindings": [
        {
            "authLevel": "function",
            "type": "httpTrigger",
            "direction": "in",
            "name": "req",
            "methods": [
                "get",
                "post"
            ]
        },
        {
            "type": "http",
            "direction": "out",
            "name": "$return"
        },​​
        {
            "type": "rabbitMQ",
            "name": "outputMessage",
            "queueName": "outputQueue",
            "connectionStringSetting": "rabbitMQConnectionAppSetting",
            "direction": "out"
        }
    ]
}

_init_.py の内容:

import azure.functions as func

def main(req: func.HttpRequest, outputMessage: func.Out[str]) -> func.HttpResponse:
    input_msg = req.params.get('message')
    outputMessage.set(input_msg)
    return 'OK'

属性

インプロセス分離ワーカー プロセスの 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)
{

注釈

RabbitMQOutput 注釈を使用すると、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 RabbitMQ に設定する必要があります。
direction out に設定する必要があります。
name 関数コード内のキューを表す変数の名前。
queueName メッセージの送信先となるキューの名前。
hostName キューのホスト名 (10.26.45.210 など)。 connectStringSetting を使う場合は無視されます。
userName UserNameSetting のような、キューにアクセスするユーザー名を含むアプリ設定の名前 (UserNameSetting: "< UserNameFromSettings >" など)。 connectStringSetting を使う場合は無視されます。
password UserNameSetting のような、キューにアクセスするパスワードを含むアプリ設定の名前 (UserNameSetting: "< UserNameFromSettings >" など)。 connectStringSetting を使う場合は無視されます。
connectionStringSetting RabbitMQ メッセージ キュー接続文字列を含むアプリ設定の名前。 local.settings.json でアプリの設定を使わず、接続文字列を直接指定した場合、トリガーは機能しません。 たとえば、connectionStringSetting: "rabbitMQConnection" を設定した場合、local.settings.json と関数アプリの両方で、"rabbitMQConnection" : "< ActualConnectionstring >" のような設定が必要になります。
port 使用されているポートを取得または設定します。 既定値は 0 です。これは、5672 という RabbitMQ クライアントの既定のポート設定を指します。

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

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

使用方法

RabbitMQ トリガーによってサポートされるパラメーターの型は、Functions ランタイムのバージョン、拡張機能パッケージのバージョン、および使用される C# のモダリティによって異なります。

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

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

出力バインドには、次のパラメーターの型を使用します。

  • byte[] - 関数が終了したときにパラメーター値が null の場合、Functions はメッセージを作成しません。
  • string - 関数が終了したときにパラメーター値が null の場合、Functions はメッセージを作成しません。
  • POJO - パラメーター値が Java オブジェクトとして書式設定されていない場合は、エラーが発生します。

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

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

次の手順