我正在使用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):
是否可以在平均0.5秒或更短的时间内从队列中读取消息?如果是,怎么办?
更新
消息从物联网中心到达队列。
因此,我的整个流程是多个设备将事件发送到物联网中心,然后物联网中心将这些事件重定向(使用路由)到服务总线队列,然后我从队列中读取这些事件。如您所见,对于measure queueReadElapsedTime used消息。排队时间UTC。我想,这是物联网中心将事件重定向到服务总线队列的时候。