将消息列表发送到 Azure 服务总线时出现性能问题

问题描述 投票:0回答:1

我正在研究一个场景,我们需要将大约 1k 条消息/秒的容量发布到 Azure 服务总线中的主题上。目前发送是这样完成的:

var messageList = GetMessagesFromDb(); // Gets serialized message content stored in the db

var sender = _serviceBusClient.CreateSender(topicName);

var serviceBusMessages = messageList.Select(x => new ServiceBusMessage
                {
                    MessageId = Guid.NewGuid().ToString(),
                    Body = BinaryData.FromObjectAsJson(JsonConvert.DeserializeObject<EventWrapper>(x.MessageContent)),
                    ContentType = "application/json",
                    ApplicationProperties =
                    {
                        { "EventId", x.EventId }
                    }
                }).ToList();
await sender.SendMessages(serviceBusMessages);

使用

System.Diagnostics.Stopwatch
我已将发送时间限制在每秒 50-200 条消息之间,这似乎异常缓慢。有没有更好的方法来实现更高的吞吐量?消息大小不是很大,通常由具有 5-30 个数据字段的 JSON 组成。

c# .net azureservicebus webapi
1个回答
0
投票

我为标准(非高级)服务总线解决此问题的一种方法是启用分区,将消息拆分为多个块发送,然后为每个块并行调用

SendMessages
。我不记得最佳并行度,但你可以做一些测试。

var chunks = serviceBusMessages.Chunk(50);
var tasks = new List<Task>();
foreach (var chunk in chunks) 
{
    tasks.Add(sender.SendMessages(chunk));
}
await Task.WhenAll(tasks);
© www.soinside.com 2019 - 2024. All rights reserved.