代码之家  ›  专栏  ›  技术社区  ›  Bohdan Simianyk

Azure服务总线队列提高了中的读取性能。净额

  •  2
  • Bohdan Simianyk  · 技术社区  · 8 年前

    我正在使用Azure服务总线队列(定价层是“标准”)开发解决方案。

    目前,我有下一个阅读机制:

        static void Main(string[] args)
        {
            var client = QueueClient.CreateFromConnectionString(ServiceBusConnectionString, QueueName);
            client.PrefetchCount = 20;
    
            client.OnMessageAsync(MessageHandler, new OnMessageOptions
            {
                MaxConcurrentCalls = 10
            });
    
            Console.ReadLine();
        }
    
        static async Task MessageHandler(BrokeredMessage message)
        {
            var queueReadElapsedTime = DateTime.UtcNow - message.EnqueuedTimeUtc;
    
            using (var stream = message.GetBody<Stream>())
            {
                using (var reader = new StreamReader(stream, Encoding.ASCII))
                {
                    var stringValue = reader.ReadToEnd();
                    await EventHandler.Handle(stringValue, queueReadElapsedTime);
                }
            }
        }
    

    我试着运行性能测试,其中20个应用程序写入队列,1个应用程序读取。之后,我通过Application Insights测量了性能,我发现从队列中读取消息平均需要0.7-1秒。互联网连接很好,所以我想几乎所有这些时间都是延迟。

    我的速度很慢,我想改进一下。 请看下图(代码示例中的queueReadElapsedTime): read messages performance measuring

    是否可以在平均0.5秒或更短的时间内从队列中读取消息?如果是,怎么办?

    更新

    消息从物联网中心到达队列。 因此,我的整个流程是多个设备将事件发送到物联网中心,然后物联网中心将这些事件重定向(使用路由)到服务总线队列,然后我从队列中读取这些事件。如您所见,对于measure queueReadElapsedTime used消息。排队时间UTC。我想,这是物联网中心将事件重定向到服务总线队列的时候。

    0 回复  |  直到 8 年前