我正在使用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):
是否可以在0.5秒内平均或更少地从队列中读取消息?如果是的话怎么样?
更新
消息从IoT Hub到达队列。 所以我的全部流程是多个设备将事件发送到IoT Hub,然后IoT Hub将这些事件重定向(使用路由)到服务总线队列,然后我从队列中读取这些事件。如您所见,对于measure queueReadElapsedTime使用了message.EnqueuedTimeUtc。我想,这是IoT Hub将事件重定向到服务总线队列的时间。