C# Azure Function 具有到服务总线的多个输出

Enr*_*ico 8 c# azureservicebus azure-servicebus-queues azure-functions

我看到了有关 Azure Functions 版本 3 的Azure 服务总线输出绑定的 Microsoft 文档。当我想将消息发送到服务总线作为函数的返回时,我可以使用以下代码:

[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;
}
Run Code Online (Sandbox Code Playgroud)

当我想将 2 条消息作为输出发送到不同的服务总线时,我的问题就开始了。是否可以输出绑定多个输出?在在线编辑器中,您可以添加多个输出。我怎样才能在代码中做到这一点?

在文档中有一个用法部分,它解释了我可以使用什么作为输出绑定。他们提到ICollector<T>IAsyncCollector<T>但我不确定这就是我要找的。

另一个问题是,如果 API 将一个值返回给总线,将另一个值返回给用户,会发生什么情况?

chr*_*ris 13

您可以有两个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);
}
Run Code Online (Sandbox Code Playgroud)

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="
    }
}
Run Code Online (Sandbox Code Playgroud)

另一个问题是,如果 API 将一个值返回给总线,将另一个值返回给用户,会发生什么情况?

在上面的示例中,它向服务总线返回(添加)一条消息并向IActionResult用户返回(HTTP 响应)。