次の方法で共有


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 関数は、@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# ライブラリの両方で、属性を使用して RabbitMQ キューに書き込む出力バインドを定義します。

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

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

注釈

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

注釈は、次の構成設定をサポートしています。

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

構成

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

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

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

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

使用方法

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

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

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

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

キュー メッセージは、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のキー値も必要です。 それ以外の場合、アプリはローカル コンピューターからサービスに接続できないため、エラーが発生します。