次の方法で共有

适用于 Azure Functions 的 RabbitMQ 输出绑定概述

使用 RabbitMQ 输出绑定将消息发送到 RabbitMQ 队列。

注释

RabbitMQ 绑定仅在弹性高级版和专用(App 服务)计划中完全受支持 尚不支持弹性消耗消耗 计划。

Azure Functions v1.x 运行时不支持 RabbitMQ 绑定。

若要了解设置和配置详细信息,请参阅概述

示例:

可使用以下 C# 模式之一来创建 C# 函数:

  • 进程内类库:编译的 C# 函数,该函数在与 Functions 运行时相同的进程中运行。
  • 独立工作进程类库:编译的 C# 函数,该函数在独立于运行时的工作进程中运行。 需要独立工作进程才能支持在 LTS 和非 LTS 版 .NET 和 .NET Framework 上运行的 C# 函数。
  • C# 脚本:主要在 Azure 门户中创建 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中的 注释来说明 RabbitMQ 队列输出绑定的配置。 该函数由 TimerTrigger 每 5 分钟触发一次,并在触发时将消息发送到 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 函数接受以下参数:

参数 DESCRIPTION
队列名称 从中接收消息的队列的名称。
HostName 此参数不再受支持,将被忽略。 它将在未来版本中删除。
ConnectionStringSetting 包含 RabbitMQ 服务器的连接字符串的应用设置的名称。 此设置仅采用应用设置密钥名称,不能直接设置连接字符串值。 有关详细信息,请参阅 连接
UserNameSetting 此参数不再受支持,将被忽略。 它将在未来版本中删除。
PasswordSetting 此参数不再受支持,将被忽略。 它将在未来版本中删除。
端口 获取或设置所使用的端口。 默认为 0,它指向 RabbitMQ 客户端的默认端口设置 5672
DisableCertificateValidation 获取或设置一个值,该值指示是否应禁用证书验证。 不建议用于生产。 禁用 SSL 时不适用。

批注

使用 RabbitMQOutput 注释,你’可以创建在创建 RabbitMQ 消息时要运行的函数。

注释支持以下配置设置:

设置 DESCRIPTION
queueName 从中接收消息的队列的名称。
connectionStringSetting 包含 RabbitMQ 服务器的连接字符串的应用设置的名称。 此设置仅采用应用设置密钥名称,不能直接设置连接字符串值。 有关详细信息,请参阅 连接
disableCertificateValidation 获取或设置一个值,该值指示是否应禁用证书验证。 不建议用于生产。 禁用 SSL 时不适用。

配置

下表解释了在 function.json 文件中设置的绑定配置属性。

“function.json”属性 DESCRIPTION
类型 必须设置为 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 身份验证和托管标识。 可以使用 Azure 密钥库集中管理 RabbitMQ 连接字符串。 若要了解详细信息,请参阅 “管理连接”。

从扩展版本 2.x 开始,hostNameuserNameSettingpasswordSetting不再支持定义与 RabbitMQ 服务器的连接。 必须改用 connectionStringSetting

connectionStringSetting 属性只能接受应用设置中的键值对的名称。 不能直接在绑定中设置连接字符串值。

例如,在绑定定义中已设置为connectionStringSettingrabbitMQConnection时,函数应用必须具有一个命名rabbitMQConnection的应用设置,该设置返回连接值(例如amqp://myuser:***@contoso.rabbitmq.example.com:5672Azure Key Vault 引用)。

在本地运行时,还必须具有 connectionStringSetting 文件中定义的键值。 否则,应用无法从本地计算机连接到服务,并发生错误。