你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
适用于 Azure Functions 的 RabbitMQ 输出绑定概述
注意
仅高级和专用计划完全支持 RabbitMQ 绑定。 不支持消耗。
使用 RabbitMQ 输出绑定将消息发送到 RabbitMQ 队列。
有关设置和配置详细信息,请参阅概述。
示例
可使用以下 C# 模式之一来创建 C# 函数:
- 独立辅助角色模型:编译的 C# 函数,该函数在独立于运行时的工作进程中运行。 需要独立工作进程才能支持在 LTS 和非 LTS 版 .NET 和 .NET Framework 上运行的 C# 函数。
- 进程内模型:编译的 C# 函数,该函数在与 Functions 运行时相同的进程中运行。
- 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 类型中的 @RabbitMQOutput
注释来说明 RabbitMQ 队列输出绑定的配置。 该函数由 TimerTrigger 每 5 分钟触发一次,并在触发时将消息发送到 RabbitMQ 队列。
@FunctionName("RabbitMQOutputExample")
public void run(
@TimerTrigger(name = "keepAliveTrigger", schedule = "0 */5 * * * *") String timerInfo,
@RabbitMQOutput(connectionStringSetting = "rabbitMQConnectionAppSetting", queueName = "hello") OutputBinding<String> output,
final ExecutionContext context) {
output.setValue("Some string");
}
以下示例演示 function.json 文件中的一个 RabbitMQ 输出绑定以及使用该绑定的 JavaScript 函数。 该函数从 HTTP 触发器读取消息,并将其输出到 RabbitMQ 队列。
下面是 function.json 文件中的绑定数据:
{
"bindings": [
{
"type": "httpTrigger",
"direction": "in",
"authLevel": "function",
"name": "input",
"methods": [
"get",
"post"
]
},
{
"type": "rabbitMQ",
"name": "outputMessage",
"queueName": "outputQueue",
"connectionStringSetting": "rabbitMQConnectionAppSetting",
"direction": "out"
}
]
}
JavaScript 代码如下所示:
module.exports = async function (context, input) {
context.bindings.outputMessage = input.body;
};
以下示例演示 function.json 文件中的一个 RabbitMQ 输出绑定以及使用该绑定的 Python 函数。 该函数从 HTTP 触发器读取消息,并将其输出到 RabbitMQ 队列。
下面是 function.json 文件中的绑定数据:
{
"scriptFile": "__init__.py",
"bindings": [
{
"authLevel": "function",
"type": "httpTrigger",
"direction": "in",
"name": "req",
"methods": [
"get",
"post"
]
},
{
"type": "http",
"direction": "out",
"name": "$return"
},
{
"type": "rabbitMQ",
"name": "outputMessage",
"queueName": "outputQueue",
"connectionStringSetting": "rabbitMQConnectionAppSetting",
"direction": "out"
}
]
}
在 _init_.py 中:
import azure.functions as func
def main(req: func.HttpRequest, outputMessage: func.Out[str]) -> func.HttpResponse:
input_msg = req.params.get('message')
outputMessage.set(input_msg)
return 'OK'
特性
进程内和独立工作进程 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)
{
批注
使用 RabbitMQOutput
注释,你’可以创建在创建 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 | 必须设置为 RabbitMQ 。 |
direction | 必须设置为 out 。 |
name | 表示函数代码中的队列的变量的名称。 |
queueName | 要向其发送消息的队列的名称。 |
hostName | 队列的主机名,例如 10.26.45.210。 使用 connectStringSetting 时忽略。 |
userName | 应用设置的名称,它包含用于访问队列的用户名,例如 UserNameSetting:“< UserNameFromSettings >”。 使用 connectStringSetting 时忽略。 |
password | 应用设置的名称,它包含用于访问队列的密码,例如 UserNameSetting:“< UserNameFromSettings >”。 使用 connectStringSetting 时忽略。 |
connectionStringSetting | 包含 RabbitMQ 消息队列连接字符串的应用设置的名称。 当直接指定连接字符串而不是通过 local.settings.json 中的应用设置指定时,触发器将不起作用。 例如,设置 connectionStringSetting: "rabbitMQConnection" 后,在 local.settings.json 和函数应用中,都需要一个类似 "rabbitMQConnection" : "< ActualConnectionstring >" 的设置。 |
port | 获取或设置所使用的端口。 默认为 0,它指向 RabbitMQ 客户端的默认端口设置 5672 。 |
在本地开发时,请将应用程序设置添加到 Values
集合的 local.settings.json 文件。
有关完整示例,请参阅示例部分。
使用情况
RabbitMQ 触发器支持的参数类型取决于 Functions 运行时版本、扩展包版本以及使用的 C# 模态。
有关完整示例,请参阅 C# 示例。
对输出绑定使用以下参数类型:
byte[]
- 如果函数退出时参数值为 null,Functions 不创建消息。string
- 如果函数退出时参数值为 null,Functions 不创建消息。POJO
- 如果参数值未格式化为 Java 对象,则会收到错误。
队列消息可通过 context.bindings.<NAME>
获得,其中 <NAME>
与 function.json 中定义的名称匹配。 如果有效负载为 JSON,该值将反序列化为对象。
请参阅 Python 示例。