使用 RabbitMQ 触发器响应 RabbitMQ 队列中的消息。
注释
RabbitMQ 绑定仅在 Elastic Premium 和 专用(应用服务) 计划中完全受支持。 尚不支持 弹性消耗 和 消耗 计划。
Azure Functions v1.x 运行时不支持 RabbitMQ 绑定。
有关设置和配置详细信息,请参阅概述。
示例
可使用以下 C# 模式之一来创建 C# 函数:
- 进程内类库:在与 Functions 运行时相同的进程中运行的已编译 C# 函数。
- 独立工作进程类库:在独立于运行时的工作进程中运行的已编译 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)
PowerShell 示例当前不可用。
特性
隔离的工作进程和进程内 C# 库都用于RabbitMQTriggerAttribute
定义函数,其中属性的特定属性取决于扩展版本。
特性的构造函数接受以下参数:
参数 | 说明 |
---|---|
QueueName | 从中接收消息的队列的名称。 |
HostName | 此参数不再受支持,将被忽略。 它将在未来版本中删除。 |
ConnectionStringSetting | 包含 RabbitMQ 服务器的连接字符串的应用设置的名称。 此设置仅采用应用设置密钥名称,不能直接设置连接字符串值。 有关详细信息,请参阅 连接。 |
UserNameSetting | 此参数不再受支持,将被忽略。 它将在未来版本中删除。 |
PasswordSetting | 此参数不再受支持,将被忽略。 它将在未来版本中删除。 |
端口 | 获取或设置使用的端口。 默认值为 0,它指向 RabbitMQ 客户端的默认端口设置 5672 。 |
批注
通过 RabbitMQTrigger
注释,可以创建在创建 RabbitMQ 消息时运行的函数。
配置
下表解释了在 function.json 文件中设置的绑定配置属性。
“function.json”属性 | 说明 |
---|---|
类型 | 必须设置为 RabbitMQTrigger 。 |
direction | 必须设置为 in 。 |
name | 在函数代码中表示队列的变量的名称。 |
queueName | 从中接收消息的队列的名称。 |
connectionStringSetting | 包含 RabbitMQ 服务器的连接字符串的应用设置的名称。 此设置仅采用应用设置密钥名称,不能直接设置连接字符串值。 有关详细信息,请参阅 连接。 |
disableCertificateValidation | 可设置为 true 指示应禁用证书验证的布尔值。 默认值为 false 。 不建议用于生产。 禁用 SSL 时不适用。 |
有关完整示例的信息,请参阅示例部分。
用法
队列消息可通过 context.bindings.<NAME>
提供,其中 <NAME>
与 function.json中定义的名称匹配。 如果有效负载为 JSON,则值将反序列化为对象。
连接
重要
RabbitMQ 绑定不支持Microsoft Entra 身份验证和托管标识。 可以使用 Azure Key Vault 集中管理 RabbitMQ 连接字符串。 若要了解详细信息,请参阅 管理连接。
从扩展版本 2.x 开始,hostName
userNameSetting
passwordSetting
不再支持定义与 RabbitMQ 服务器的连接。 必须改用 connectionStringSetting
。
该 connectionStringSetting
属性只能接受应用设置中的键值对的名称。 不能直接在绑定中设置连接字符串值。
例如,在绑定定义中已设置为connectionStringSetting
rabbitMQConnection
时,函数应用必须具有一个命名rabbitMQConnection
的应用设置,该设置返回连接值(例如amqp://myuser:***@contoso.rabbitmq.example.com:5672
或 Azure Key Vault 引用)。
在本地运行时,还必须具有 connectionStringSetting
文件中定义的键值。 否则,应用无法从本地计算机连接到服务,并发生错误。
死信队列
无法从 RabbitMQ 触发器控制或配置死信队列和交换。 若要使用死信队列,请在 RabbitMQ 中预配置触发器使用的队列。 请参阅 RabbitMQ 文档。
启用运行时缩放
为了使 RabbitMQ 触发器横向扩展到多个实例,必须启用 运行时缩放监视 设置。
在门户中,可以在函数应用的 配置>函数运行时设置 下找到此设置。
在 Azure CLI 中,可以使用以下命令启用 运行时缩放监视 :
az resource update -resource-group <RESOURCE_GROUP> -name <APP_NAME>/config/web \
--set properties.functionsRuntimeScaleMonitoringEnabled=1 \
--resource-type Microsoft.Web/sites
监视 RabbitMQ 终结点
若要监视某个 RabbitMQ 终结点的队列和交换,请执行以下作:
- 启用 RabbitMQ 管理插件
- 浏览到
http://{node-hostname}:15672
并使用用户名和密码登录。