Как мы можем ускорить получение сообщений от MSMQ?
Узким местом моего приложения стала отправка и получение сообщений через MSMQ с помощью MassTransit. Отправка и получение происходят в одном приложении, но часто слишком много сообщений, чтобы использовать очередь в памяти.
Вот моя простая настройка очереди:
messageBus = ServiceBusFactory.New(sbc =>
{
sbc.UseMsmq();
sbc.VerifyMsmqConfiguration();
sbc.UseMulticastSubscriptionClient();
sbc.ReceiveFrom("msmq://localhost/msg_queue");
sbc.Subscribe(subs =>
{
subs.Handler<EventMessage>(msg => Enqueue(msg));
});
});
Для моих экспериментов MSMQ в настоящее время имеет ~1 миллион сообщений, и мы не добавляем в него никаких новых сообщений. Мы не делаем никакой работы в Enqueue()
кроме времени, как быстро отправляются сообщения.
Имея эту информацию, мы можем получать от MSMQ только 150–200 сообщений в секунду, когда я надеялся, что при задержке в сети это будет не менее 1000 сообщений в секунду. Каждое сообщение <2 КБ.
Как мы можем ускорить, как быстро MSMQ передает сообщения приложению через MassTransit, поддерживая порядок сообщений, установленный очередью?
1 ответ
Я обращался к чему-то похожему раньше. Если я правильно помню, мы указали срок действия сообщения через TimeToBeReceived
(Общее время для отправки отправленного сообщения из очереди назначения. По умолчанию используется InfiniteTimeout.) . См. Эту ссылку MSDN.