我正在使用 Azure Queue 后端测试 NServiceBus。我使用所有默认设置配置了 NServiceBus,并使用此代码发送消息:
while ((data = Console.ReadLine()) != null)
{
Stopwatch sw = new Stopwatch();
sw.Start();
Bus.Send("testqueue", new Message() {Data = data});
sw.Stop();
Console.WriteLine("Sent time: " + sw.ElapsedMilliseconds);
}
在我的开发机器上运行时,将消息发送到队列大约需要 700 毫秒。队列很远,直接使用 Azure 存储客户端写入时约为 350 毫秒。
现在我有两个问题:
- 我不希望线程阻塞 Bus.Send 调用。一种选择是使用 async\await 模式。另一种选择是使用内存队列来传递消息,类似于 0MQ。最后一个选项不能保证交付当然,但假设有一些监控功能,我可以接受。
- 为什么发送消息需要两倍于简单写入队列的时间?这可以优化吗?