Azure Functions:如何使用绑定有效地将一批消息发送到服务总线?

Azure Functions: how to efficiently send batch of messages to Service Bus using bindings?

我正在使用 Azure Functions 2.0 并尝试将一组消息发送到 Azure 服务总线主题。目前我正在使用 IAsyncCollector<T> 作为输出绑定:

[FunctionName("MyFunction")]
public static async Task MyFunction([ServiceBus(MyTopicName, EntityType.Topic, Connection = ServiceBusConnection) outTopic])
{
    var messages = await GetMessages();
    foreach(var message in messages)
    {
        await outTopic.AddAsync(message);
    }
}

这种方法非常方便(声明式代码,没有样板)但带来了一个重要问题:对于大量消息,性能是不可接受的。是否有任何其他推荐的方法来处理需要发送到 Azure 服务总线的大批量?

似乎在将 IAsyncCollector 与 ServiceBus(和其他服务)一起使用时存在一个已知问题。

https://github.com/Azure/azure-webjobs-sdk/issues/921

查看重新订购的第一反应和这个:

This is easy when if we only send a small number of rows via IAsyncCollector because we could just buffer in -memory and force an ordering. But it’s prohibitive if we send huge payloads.