使用 RabbitMQ 触发器响应来自 RabbitMQ 队列的消息。
注意
RabbitMQ 绑定仅在弹性高级版和专用(App 服务)计划中完全受支持。 尚不支持弹性消耗 和 消耗 计划。
Azure Functions v1.x 运行时不支持 RabbitMQ 绑定。
若要了解设置和配置详细信息,请参阅概述。
示例
可以使用以下 C# 模式之一创建 C# 函数:
- 独立辅助角色模型:编译的 C# 函数,该函数在独立于运行时的工作进程中运行。 需要隔离的工作进程来支持长期支持 (LTS) 和非 LTS 版本的 .NET 和 .NET Framework 上运行的 C# 函数。
- 进程内模型:在 Azure Functions 运行时所在的同一进程中运行的已编译 C# 函数。
- C# 脚本:主要在 Azure 门户中创建 C# 函数时使用。
重要
对进程内模型的支持将于 2026 年 11 月 10 日结束。 为获得完全支持,强烈建议将应用迁移到独立工作模型。
[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
中的 注释来说明 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 中定义,其中“类型”设置为 。
{
"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)
特性
进程内和独立工作进程 C# 库都使用 特性来定义函数。 C# 脚本改为使用 function.json 配置文件。
该特性的构造函数采用以下参数:
参数 | 说明 |
---|---|
队列名称 | 从中接收消息的队列的名称。 |
HostName | 队列的主机名,例如 10.26.45.210。 使用 ConnectStringSetting 时忽略。 |
UserNameSetting | 应用设置的名称,其中包含用于访问队列的用户名,例如 UserNameSetting: "%< UserNameFromSettings >%" 。 使用 ConnectStringSetting 时忽略。 |
PasswordSetting | 应用设置的名称,其中包含用于访问队列的密码,例如 PasswordSetting: "%< PasswordFromSettings >%" 。 使用 ConnectStringSetting 时忽略。 |
ConnectionStringSetting | 包含 RabbitMQ 消息队列连接字符串的应用设置的名称。 当直接指定连接字符串而不是通过应用设置指定时,触发器将不起作用。 例如,设置 ConnectionStringSetting: "rabbitMQConnection" 后,在 local.settings.json 和函数应用中,都需要一个类似 的设置。 |
端口 | 获取或设置所使用的端口。 默认为 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)
{
批注
使用 RabbitMQTrigger
注释,你’可以创建在创建 RabbitMQ 消息时要运行的函数。
注释支持以下配置选项:
参数 | 说明 |
---|---|
queueName | 从中接收消息的队列的名称。 |
hostName | 队列的主机名,例如 10.26.45.210。 使用 ConnectStringSetting 时忽略。 |
userNameSetting | 应用设置的名称,其中包含用于访问队列的用户名,例如 UserNameSetting: "%< UserNameFromSettings >%" 。 使用 ConnectStringSetting 时忽略。 |
passwordSetting | 应用设置的名称,其中包含用于访问队列的密码,例如 PasswordSetting: "%< PasswordFromSettings >%" 。 使用 ConnectStringSetting 时忽略。 |
connectionStringSetting | 包含 RabbitMQ 消息队列连接字符串的应用设置的名称。 当直接指定连接字符串而不是通过应用设置指定时,触发器将不起作用。 例如,设置 ConnectionStringSetting: "rabbitMQConnection" 后,在 local.settings.json 和函数应用中,都需要一个类似 的设置。 |
港口 | 获取或设置所使用的端口。 默认为 0,它指向 RabbitMQ 客户端的默认端口设置 5672 。 |
配置
下表解释了在 function.json 文件中设置的绑定配置属性。
“function.json”属性 | 说明 |
---|---|
类型 | 必须设置为 RabbitMQTrigger 。 |
方向 | 必须设置为 in 。 |
名字 | 表示函数代码中的队列的变量的名称。 |
queueName | 从中接收消息的队列的名称。 |
hostName | 队列的主机名,例如 10.26.45.210。 使用 connectStringSetting 时忽略。 |
userNameSetting | 应用设置的名称,其中包含用于访问队列的用户名,例如 UserNameSetting: "%< UserNameFromSettings >%" 。 使用 connectStringSetting 时忽略。 |
passwordSetting | 应用设置的名称,其中包含用于访问队列的密码,例如 PasswordSetting: "%< PasswordFromSettings >%" 。 使用 connectStringSetting 时忽略。 |
connectionStringSetting | 包含 RabbitMQ 消息队列连接字符串的应用设置的名称。 当直接指定连接字符串而不是通过应用设置指定时,触发器将不起作用。 例如,设置 connectionStringSetting: "rabbitMQConnection" 后,在 local.settings.json 和函数应用中,都需要一个类似 的设置。 |
港口 | 获取或设置所使用的端口。 默认为 0,它指向 RabbitMQ 客户端的默认端口设置 5672 。 |
有关完整示例,请参阅示例部分。
使用情况
重要
RabbitMQ 绑定不支持Microsoft Entra 身份验证和托管标识。 可以使用 Azure 密钥库集中管理 RabbitMQ 连接字符串。 若要了解详细信息,请参阅 “管理连接”。
RabbitMQ 触发器支持的参数类型取决于使用的 C# 形式。
有关完整示例,请参阅 C# 示例。
参考 Java 注释。
队列消息可通过 context.bindings.<NAME>
获得,其中 <NAME>
与 function.json 中定义的名称匹配。 如果有效负载为 JSON,该值将反序列化为对象。
请参阅 Python 示例。
死信队列
死信队列和交换不能通过 RabbitMQ 触发器进行控制或配置。 要使用死信队列,请在 RabbitMQ 中预先配置触发器使用的队列。 请参阅 RabbitMQ 文档。
host.json 设置
本部分介绍版本 2.x 及更高版本中此绑定可用的配置设置。 host.json 文件中的设置将应用于函数应用实例中的所有函数。 有关函数应用配置设置的详细信息,请参阅 Azure Functions 的host.json 参考。
{
"version": "2.0",
"extensions": {
"rabbitMQ": {
"prefetchCount": 100,
"queueName": "queue",
"connectionString": "amqp://user:password@url:port",
"port": 10
}
}
}
属性 | 默认 | 说明 |
---|---|---|
prefetchCount | 30 | 获取或设置消息接收方可以同时请求并缓存的消息数。 |
队列名称 | 不适用 | 从中接收消息的队列的名称。 |
connectionString | 不适用 | RabbitMQ 消息队列连接字符串。 连接字符串在此处直接指定,而不是通过应用设置指定。 |
港口 | 0 | (如果使用 connectionString,则忽略)获取或设置所使用的端口。 默认值为 0,该值指向 rabbitmq 客户端的默认端口设置:5672。 |
本地测试
注意
connectionString 优先于“hostName”、“userName”和“password”。 如果这几项全部设置,则 connectionString 将替代另两项。
如果在没有连接字符串的情况下进行本地测试,则应在 host.json 的“rabbitMQ”部分中设置“hostName”设置以及“userName”和“password”(如果适用):
{
"version": "2.0",
"extensions": {
"rabbitMQ": {
...
"hostName": "localhost",
"username": "userNameSetting",
"password": "passwordSetting"
}
}
}
属性 | 默认 | 说明 |
---|---|---|
主机名 | 不适用 | (如果使用 connectionString,则忽略) 队列的主机名(例如:10.26.45.210) |
用户名 | 不适用 | (如果使用 connectionString,则忽略) 用于访问队列的名称 |
密码 | 不适用 | (如果使用 connectionString,则忽略) 用于访问队列的密码 |
启用运行时缩放
为了使 RabbitMQ 触发器横向扩展到多个实例,必须启用“运行时缩放监视”设置。
在门户中,可以在函数应用的“配置”“函数运行时设置”下找到此设置 。
在 CLI 中,可以使用以下命令启用“运行时缩放监视”:
az resource update -g <resource_group> -n <function_app_name>/config/web --set properties.functionsRuntimeScaleMonitoringEnabled=1 --resource-type Microsoft.Web/sites
监视 RabbitMQ 终结点
若要监视特定 RabbitMQ 终结点的队列和交换,请执行以下操作:
- 启用 RabbitMQ 管理插件
- 浏览到 http://{node-hostname}:15672,然后用你的用户名和密码登录。