Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
使用 RabbitMQ 触发器响应 RabbitMQ 队列中的消息。
Nota
RabbitMQ 绑定仅在 Elastic Premium 和 专用(应用服务) 计划中完全受支持。 尚不支持 弹性消耗 和 消耗 计划。
Azure Functions v1.x 运行时不支持 RabbitMQ 绑定。
有关设置和配置详细信息,请参阅概述。
可使用以下 C# 模式之一来创建 C# 函数:
- 进程内类库:在与 Functions 运行时相同的进程中运行的已编译 C# 函数。
- 独立工作进程类库:在独立于运行时的工作进程中运行的已编译 C# 函数。 需要独立工作进程才能支持在 LTS 和非 LTS 版 .NET 和 .NET Framework 上运行的 C# 函数。
- C# 脚本:主要在 Azure 门户中创建 C# 函数时使用。
Importante
对进程内模型的支持将于 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 >" 。 |
端口 | 获取或设置使用的端口。 默认值为 0,它指向 RabbitMQ 客户端的默认端口设置 5672 。 |
下表解释了在 function.json 文件中设置的绑定配置属性。
“function.json”属性 | 说明 |
---|---|
类型 | 必须设置为 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 >" 。 |
端口 | 获取或设置使用的端口。 默认值为 0,它指向 RabbitMQ 客户端的默认端口设置 5672 。 |
有关完整示例的信息,请参阅示例部分。
Importante
RabbitMQ 绑定不支持Microsoft Entra 身份验证和托管标识。 可以使用 Azure Key Vault 集中管理 RabbitMQ 连接字符串。 若要了解详细信息,请参阅 管理连接。
RabbitMQ 触发器支持的参数类型取决于所使用的 C# 形式。
有关完整示例,请参阅 C# 示例。
请参阅 Java 批注。
队列消息可通过 context.bindings.<NAME>
提供,其中 <NAME>
与 function.json中定义的名称匹配。 如果有效负载为 JSON,则值将反序列化为对象。
请参阅 Python 示例。
无法从 RabbitMQ 触发器控制或配置死信队列和交换。 若要使用死信队列,请在 RabbitMQ 中预配置触发器使用的队列。 请参阅 RabbitMQ 文档。
本部分介绍版本 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 | n/a | 要从中接收消息的队列的名称。 |
connectionString | n/a | RabbitMQ 消息队列连接字符串。 连接字符串在此处直接指定,而不是通过应用设置指定。 |
港口 | 0 | (如果使用 connectionString,则忽略)获取或设置使用的端口。 默认值为 0,它指向 rabbitmq 客户端的默认端口设置:5672。 |
Nota
connectionString 优先于“hostName”、“userName”和“password”。 如果全部设置,connectionString 将替代其他两个。
如果要在本地测试而不使用连接字符串,则应在 host.json的“rabbitMQ”部分中设置“hostName”设置和“userName”和“password” :
{
"version": "2.0",
"extensions": {
"rabbitMQ": {
...
"hostName": "localhost",
"username": "userNameSetting",
"password": "passwordSetting"
}
}
}
财产 | 违约 | 说明 |
---|---|---|
hostName | n/a | (如果使用 connectionString,则忽略) 队列的主机名(例如:10.26.45.210) |
用户名 | n/a | (如果使用 connectionString,则忽略) 用于访问队列的名称 |
密码 | n/a | (如果使用 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 管理插件
- 浏览到 http://{node-hostname}:15672,并使用用户名和密码登录。