Azure功能:如何使用绑定有效地将一批消息发送到Service Bus?

时间:2019-07-15 08:21:17

标签: c# azure azure-functions azureservicebus azure-servicebus-topics

我正在使用Azure Functions 2.0,并尝试向Azure Service Bus主题发送消息集合。目前,我正在使用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 Service Bus的大批处理?

1 个答案:

答案 0 :(得分:1)

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

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

请参阅第一个响应的重新排序及其内容:

  

如果我们仅通过发送少量行,这很容易   IAsyncCollector,因为我们可以仅缓冲-memory并强制执行   订购。但是,如果我们发送大量有效载荷,那是禁止的。