你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
使用 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)
PowerShell 示例当前不可用。
特性
隔离的工作进程和进程内 C# 库都用于RabbitMQTriggerAttribute定义函数,其中属性的特定属性取决于扩展版本。
特性的构造函数接受以下参数:
| 参数 | 说明 |
|---|---|
| 队列名称 | 从中接收消息的队列的名称。 |
| HostName | 此参数不再受支持,将被忽略。 它将在未来版本中删除。 |
| ConnectionStringSetting | 包含 RabbitMQ 服务器的连接字符串的应用设置的名称。 此设置仅采用应用设置密钥名称,不能直接设置连接字符串值。 有关详细信息,请参阅 连接。 |
| UserNameSetting | 此参数不再受支持,将被忽略。 它将在未来版本中删除。 |
| PasswordSetting | 此参数不再受支持,将被忽略。 它将在未来版本中删除。 |
| 端口 | 获取或设置所使用的端口。 默认为 0,它指向 RabbitMQ 客户端的默认端口设置 5672。 |
批注
使用 RabbitMQTrigger 注释,你’可以创建在创建 RabbitMQ 消息时要运行的函数。
配置
下表解释了在 function.json 文件中设置的绑定配置属性。
| “function.json”属性 | 说明 |
|---|---|
| 类型 | 必须设置为 RabbitMQTrigger。 |
| 方向 | 必须设置为 in。 |
| 名字 | 表示函数代码中的队列的变量的名称。 |
| 队列名称 | 从中接收消息的队列的名称。 |
| connectionStringSetting | 包含 RabbitMQ 服务器的连接字符串的应用设置的名称。 此设置仅采用应用设置密钥名称,不能直接设置连接字符串值。 有关详细信息,请参阅 连接。 |
| disableCertificateValidation | 可设置为 true 指示应禁用证书验证的布尔值。 默认值为 false。 不建议用于生产。 禁用 SSL 时不适用。 |
有关完整示例,请参阅示例部分。
使用情况
队列消息可通过 context.bindings.<NAME> 获得,其中 <NAME> 与 function.json 中定义的名称匹配。 如果有效负载为 JSON,该值将反序列化为对象。
连接
重要
RabbitMQ 绑定不支持Microsoft Entra 身份验证和托管标识。 可以使用 Azure 密钥库集中管理 RabbitMQ 连接字符串。 若要了解详细信息,请参阅 “管理连接”。
从扩展版本 2.x 开始,hostNameuserNameSettingpasswordSetting不再支持定义与 RabbitMQ 服务器的连接。 必须改用 connectionStringSetting。
该 connectionStringSetting 属性只能接受应用设置中的键值对的名称。 不能直接在绑定中设置连接字符串值。
例如,在绑定定义中已设置为connectionStringSettingrabbitMQConnection时,函数应用必须具有一个命名rabbitMQConnection的应用设置,该设置返回连接值(例如amqp://myuser:***@contoso.rabbitmq.example.com:5672或 Azure Key Vault 引用)。
在本地运行时,还必须具有 local.settings.json 文件中定义的键值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并使用用户名和密码登录。