Azure Service Bus Queue提高了.NET

时间:2017-11-18 10:17:10

标签: .net performance azure azure-iot-hub azure-servicebus-queues

我正在使用Azure Service Bus Queue处理解决方案(定价层是“标准”)。

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

    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秒内平均或更少地从队列中读取消息?如果是的话怎么样?

更新

消息从IoT Hub到达队列。 所以我的全部流程是多个设备将事件发送到IoT Hub,然后IoT Hub将这些事件重定向(使用路由)到服务总线队列,然后我从队列中读取这些事件。如您所见,对于measure queueReadElapsedTime使用了message.EnqueuedTimeUtc。我想,这是IoT Hub将事件重定向到服务总线队列的时间。

0 个答案:

没有答案