【发布时间】:2022-01-15 02:30:20
【问题描述】:
我目前正在实现一个库以更快地将消息发送到服务总线队列。观察到的是,如果我使用同一个ServiceBusClient,使用同一个sender并行发送消息的话,吞吐量并没有那么高,我的网络上传速度也没有得到充分利用。当我创建单个客户端并使用它们发送时,吞吐量会急剧增加,甚至可以很好地利用我的上传带宽。
我的理解是正确的还是必须由单个客户端发送者来做?另外,我不喜欢创建多个客户端,因为它会使用大量资源来建立客户端连接。有没有文章对此有所启发?
有一个吞吐量测试工具,它的代码也创建了多个客户端。
protected override Task OnStartAsync()
{
for (int i = 0; i < this.Settings.SenderCount; i++)
{
this.senders.Add(Task.Run(SendTask));
}
return Task.WhenAll(senders);
}
async Task SendTask()
{
var client = new ServiceBusClient(this.Settings.ConnectionString);
ServiceBusSender sender = client.CreateSender(this.Settings.SendPath);
var payload = new byte[this.Settings.MessageSizeInBytes];
var semaphore = new DynamicSemaphoreSlim(this.Settings.MaxInflightSends.Value);
var done = new SemaphoreSlim(1);
done.Wait();
long totalSends = 0;
https://github.com/Azure-Samples/service-bus-dotnet-messaging-performance
是否有一个库来管理池中的连接?
【问题讨论】:
标签: azure azureservicebus azure-sdk-.net