Azure Functions 的 RabbitMQ 触发器概述
注意
仅高级和专用计划完全支持 RabbitMQ 绑定。 不支持消耗。
使用 RabbitMQ 触发器响应来自 RabbitMQ 队列的消息。
有关设置和配置详细信息,请参阅概述。
示例
可使用以下 C# 模式之一来创建 C# 函数:
- 进程内类库:编译的 C# 函数,该函数在与 Functions 运行时相同的进程中运行。
- 独立工作进程类库:编译的 C# 函数,该函数在独立于运行时的工作进程中运行。 需要独立工作进程才能支持在 LTS 和非 LTS 版 .NET 和 .NET Framework 上运行的 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 函数使用 Java RabbitMQ 类型中的 @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 中定义,其中“类型”设置为 RabbitMQTrigger
。
{
"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 配置文件。
该特性的构造函数采用以下参数:
参数 | 说明 |
---|---|
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)
{
批注
使用 RabbitMQTrigger
注释,你’可以创建在创建 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 | 必须设置为 RabbitMQTrigger 。 |
direction | 必须设置为 in 。 |
name | 表示函数代码中的队列的变量的名称。 |
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 。 |
在本地开发时,请将应用程序设置添加到 Values
集合的 local.settings.json 文件。
有关完整示例,请参阅示例部分。
使用情况
RabbitMQ 触发器支持的参数类型取决于使用的 C# 形式。
有关完整示例,请参阅 C# 示例。
参考 Java 注释。
队列消息可通过 context.bindings.<NAME>
获得,其中 <NAME>
与 function.json 中定义的名称匹配。 如果有效负载为 JSON,该值将反序列化为对象。
请参阅 Python 示例。
死信队列
死信队列和交换不能通过 RabbitMQ 触发器进行控制或配置。 要使用死信队列,请在 RabbitMQ 中预先配置触发器使用的队列。 请参阅 RabbitMQ 文档。
host.json 设置
本部分介绍版本 2.x 及更高版本中可用于此绑定的配置设置。 host.json 文件中的设置将应用于函数应用实例中的所有函数。 下面的示例 host.json 文件仅包含此绑定的 2.x 版及更高版本设置。 若要详细了解版本 2.x 及更高版本中的函数应用程序配置设置,请参阅 Azure Functions 的 host.json 参考。
{
"version": "2.0",
"extensions": {
"rabbitMQ": {
"prefetchCount": 100,
"queueName": "queue",
"connectionString": "amqp://user:password@url:port",
"port": 10
}
}
}
属性 | 默认 | 说明 |
---|---|---|
prefetchCount | 30 | 获取或设置消息接收方可以同时请求并缓存的消息数。 |
queueName | 不适用 | 从中接收消息的队列的名称。 |
connectionString | 不适用 | RabbitMQ 消息队列连接字符串。 连接字符串在此处直接指定,而不是通过应用设置指定。 |
port | 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"
}
}
}
属性 | 默认 | 说明 |
---|---|---|
hostName | 不适用 | (如果使用 connectionString,则忽略) 队列的主机名(例如:10.26.45.210) |
userName | 不适用 | (如果使用 connectionString,则忽略) 用于访问队列的名称 |
password | 不适用 | (如果使用 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,然后用你的用户名和密码登录。