我正在使用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的大批处理?
答案 0 :(得分:1)
将IAsyncCollector与ServiceBus(和其他服务)一起使用时,似乎存在一个已知问题。
https://github.com/Azure/azure-webjobs-sdk/issues/921
请参阅第一个响应的重新排序及其内容:
如果我们仅通过发送少量行,这很容易 IAsyncCollector,因为我们可以仅缓冲-memory并强制执行 订购。但是,如果我们发送大量有效载荷,那是禁止的。