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

标签 c# azure-functions azureservicebus azure-servicebus-queues

我看到了 Azure Service Bus output binding 的 Microsoft 文档对于 Azure Functions 版本 3。当我想将消息发送到服务总线作为函数的返回时,我可以使用以下代码:

[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 条消息作为输出到不同的服务总线时,我的问题就开始了。是否可以输出绑定(bind)多个输出?在在线编辑器中,您可以添加多个输出。我怎样才能在代码中做到这一点?

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

另一个问题是,在向总线返回一个值而向用户返回另一个值的 API 中会发生什么?

最佳答案

你可以有两个 IAsyncCollector<T>输出绑定(bind):

[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 响应)给用户。

关于具有多个输出到服务总线的 C# Azure 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61592248/

相关文章:

c# - 删除 RadGrid 中的第 11 行使其变为空白

c# - 通过 tcp 网络流读/写字符串

c# - .NET 控制台在编写某些字符串时播放声音

azure - 停止/终止按消耗计划运行实例的 Azure Functions

multithreading - QueueUtil 为 MessageHandler 生成太多线程,异步/等待问题

c# - 如何将消息放入死信并在azure函数中经过一段时间后处理它

c# - 如何修复 .NET Windows 应用程序在启动时崩溃并出现异常代码 : 0xE0434352?

azure - 使用 ARM 模板自动创建 Azure DevOps 组织

azure - 如何使用 Azure 服务近乎实时地监听 GCP 发布/订阅

azure - 为 Windows 服务总线命名空间配置 DNS DNSEntry