你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

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

注意

仅高级和专用计划完全支持 RabbitMQ 绑定。 不支持消耗。

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

有关设置和配置详细信息,请参阅概述

示例

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

  • 独立辅助角色模型:编译的 C# 函数,该函数在独立于运行时的工作进程中运行。 需要独立工作进程才能支持在 LTS 和非 LTS 版 .NET 和 .NET Framework 上运行的 C# 函数。
  • 进程内模型:编译的 C# 函数,该函数在与 Functions 运行时相同的进程中运行。
  • 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 函数使用 Java RabbitMQ 类型中的 @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# 库都使用 特性来定义函数。 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,它指向 RabbitMQ 客户端的默认端口设置 5672

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,它指向 RabbitMQ 客户端的默认端口设置 5672

有关更多详细信息,请参阅输出绑定示例

配置

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

function.json 属性 说明
type 必须设置为 RabbitMQ
direction 必须设置为 out
name 表示函数代码中的队列的变量的名称。
queueName 要向其发送消息的队列的名称。
hostName 队列的主机名,例如 10.26.45.210。 使用 connectStringSetting 时忽略。
userName 应用设置的名称,它包含用于访问队列的用户名,例如 UserNameSetting:“< UserNameFromSettings >”。 使用 connectStringSetting 时忽略。
password 应用设置的名称,它包含用于访问队列的密码,例如 UserNameSetting:“< UserNameFromSettings >”。 使用 connectStringSetting 时忽略。
connectionStringSetting 包含 RabbitMQ 消息队列连接字符串的应用设置的名称。 当直接指定连接字符串而不是通过 local.settings.json 中的应用设置指定时,触发器将不起作用。 例如,设置 connectionStringSetting: "rabbitMQConnection" 后,在 local.settings.json 和函数应用中,都需要一个类似 "rabbitMQConnection" : "< ActualConnectionstring >" 的设置。
port 获取或设置所使用的端口。 默认为 0,它指向 RabbitMQ 客户端的默认端口设置 5672

在本地开发时,请将应用程序设置添加到 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 示例

后续步骤