我使用Azure队列后端测试NServiceBus。我配置使用NServiceBus所有默认设置,并有这样的代码来发送消息:当使用NServiceBus使用Azure队列时Bus.Send被阻塞
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);
}
当我的dev的机器上运行,它需要〜700毫秒来发送消息到队列。直接使用Azure存储客户端编写时,队列很远,大约350毫秒。
现在我有两个问题:
- 我不想线程上Bus.Send呼叫阻塞。一种选择是使用async \ await模式。另一种选择是在内存队列中传递消息,类似于0MQ。最后一个选项并不能保证提供当然,但假设有一些监控功能,我可以忍受。
- 为什么发送消息需要两次简单写入队列的时间?这可以优化吗?
感谢您的答复。问题不在于长时间的延迟。预计从我的开发机器300毫秒。问题是没有async \ await选项,并且在发送消息时必须阻塞线程。我们希望在一台机器上每秒处理1000个请求。如果我们这样做,我们将至少有1000个线程正在旋转并等待来自NServiceBus的响应。当您执行async \ await时,线程将在等待期间释放。否则,线程就处于等待状态并阻塞。 –
这是在团队雷达提供,但现在我建议你使用多个发送线程包装发送并行为例如 –
并使用多个队列以及顺便说一句,你将无法填充成千上万的消息无论您使用多少个线程,都可以始终通过单个队列 –