Как мы можем ускорить получение сообщений от 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.

Другие вопросы по тегам