具有多个输出到服务总线的 C# Azure Function
C# Azure Function with multiple output to a service bus
我看到了 Azure Functions 版本 3 Azure Service Bus output binding 的 Microsoft 文档。当我想将消息作为函数的 return 发送到服务总线时,我可以使用以下代码:
[FunctionName("ServiceBusOutput")]
[return: ServiceBus("myqueue", Connection = "ServiceBusConnection")]
public static string ServiceBusOutput([HttpTrigger] dynamic input, ILogger log)
{
log.LogInformation($"C# function processed: {input.Text}");
return input.Text;
}
当我想将 2 条消息作为输出到不同的服务总线时,我的问题就开始了。是否可以输出绑定多个输出?在在线编辑器中,您可以添加多个输出。我怎样才能在代码中做到这一点?
文档中有一段用法,它解释了我可以用作输出绑定的内容。他们提到 ICollector<T>
或 IAsyncCollector<T>
,但我不确定这是我要找的。
另一个问题是 API 中发生了什么,return 一个值给总线,另一个给用户?
您可以有两个 IAsyncCollector<T>
输出绑定:
[FunctionName("HttpTriggeredFunction")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
[ServiceBus("queuename1", Connection = "ServiceBusConnectionString1")] IAsyncCollector<dynamic> outputServiceBus1,
[ServiceBus("queuename2", Connection = "ServiceBusConnectionString2")] IAsyncCollector<dynamic> outputServiceBus2,
ILogger log)
{
await outputServiceBus1.AddAsync("Item1");
await outputServiceBus2.AddAsync("Item2");
return new OkObjectResult(null);
}
local.settings.json
:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"ServiceBusConnectionString1": "Endpoint=sb://sb1.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=",
"ServiceBusConnectionString2": "Endpoint=sb://sb2.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey="
}
}
Other question is what happens in an API that returns one value to the bus and another to the user?
在上面的示例中,它向服务总线返回(添加)消息并向用户返回 IActionResult
(HTTP 响应)。
我看到了 Azure Functions 版本 3 Azure Service Bus output binding 的 Microsoft 文档。当我想将消息作为函数的 return 发送到服务总线时,我可以使用以下代码:
[FunctionName("ServiceBusOutput")]
[return: ServiceBus("myqueue", Connection = "ServiceBusConnection")]
public static string ServiceBusOutput([HttpTrigger] dynamic input, ILogger log)
{
log.LogInformation($"C# function processed: {input.Text}");
return input.Text;
}
当我想将 2 条消息作为输出到不同的服务总线时,我的问题就开始了。是否可以输出绑定多个输出?在在线编辑器中,您可以添加多个输出。我怎样才能在代码中做到这一点?
文档中有一段用法,它解释了我可以用作输出绑定的内容。他们提到 ICollector<T>
或 IAsyncCollector<T>
,但我不确定这是我要找的。
另一个问题是 API 中发生了什么,return 一个值给总线,另一个给用户?
您可以有两个 IAsyncCollector<T>
输出绑定:
[FunctionName("HttpTriggeredFunction")]
public async Task<IActionResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
[ServiceBus("queuename1", Connection = "ServiceBusConnectionString1")] IAsyncCollector<dynamic> outputServiceBus1,
[ServiceBus("queuename2", Connection = "ServiceBusConnectionString2")] IAsyncCollector<dynamic> outputServiceBus2,
ILogger log)
{
await outputServiceBus1.AddAsync("Item1");
await outputServiceBus2.AddAsync("Item2");
return new OkObjectResult(null);
}
local.settings.json
:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "UseDevelopmentStorage=true",
"FUNCTIONS_WORKER_RUNTIME": "dotnet",
"ServiceBusConnectionString1": "Endpoint=sb://sb1.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=",
"ServiceBusConnectionString2": "Endpoint=sb://sb2.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey="
}
}
Other question is what happens in an API that returns one value to the bus and another to the user?
在上面的示例中,它向服务总线返回(添加)消息并向用户返回 IActionResult
(HTTP 响应)。