Я тестирую NServiceBus с серверной частью Azure Queue. Я настроил 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 мс. Очередь далеко, ~350 мс при записи напрямую с помощью клиента службы хранилища Azure.
Теперь у меня два вопроса:
- Я не хочу, чтобы поток блокировался при вызове Bus.Send. Один из вариантов — использовать шаблон async\await. Другой вариант — иметь очередь в памяти для доставки сообщений, аналогично 0MQ. Последний вариант, конечно, не гарантирует доставки, но если есть некоторые возможности мониторинга, я могу с этим смириться.
- Почему отправка сообщения занимает в два раза больше времени, чем простая запись в очередь? Можно ли это оптимизировать?