Wąskie gardło mojej aplikacji stało się wysyłaniem i odbieraniem wiadomości przez MSMQ z MassTransit. Wysyłanie i odbieranie odbywa się w ramach tej samej aplikacji, ale często jest za dużo wiadomości, aby użyć kolejki w pamięci.Jak możemy przyspieszyć otrzymywanie wiadomości z MSMQ?
Oto mój prosty setup kolejka:
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));
});
});
Dla moich doświadczeniach MSMQ obecnie ~ 1 milion wiadomości i nie naciskają żadnych nowych wiadomości do niego. Nie wykonujemy żadnej pracy w Enqueue()
z wyjątkiem czasu, w jakim wysyłane są wiadomości.
Dzięki tym informacjom możemy pobrać tylko od 150 do 200 wiadomości na sekundę z MSMQ, kiedy miałem nadzieję, że będzie to co najmniej 1000 wiadomości na sekundę, gdy nie ma opóźnień w sieci. Każda wiadomość to < 2kb.
Jak możemy przyspieszyć, jak szybko MSMQ przekazuje wiadomości do aplikacji przez MassTransit, zachowując kolejność wiadomości wymuszoną przez kolejkę?
Być może już to przeszedłeś, ale zapoznaj się z [patrz tutaj] (http://support.microsoft.com/kb/199428). Używamy Websphere MQ i prawdopodobnie dostajemy informacje o tym, co robisz teraz dzięki MSMQ. –
Na czym opiera się twoje 1000 wiadomości/druga nadzieja? –
Jeśli masz obecnie zaległości * nieprzetworzonych wiadomości *, nie oczekuj cudów, magazyn danych jest dla nich znaczny. MSMQ nie ma problemu z obsługą tysięcy wiadomości na sekundę. To poszło nie tak dawno temu, najlepiej oczyścić kolejkę, aby powrócić do rozsądnego punktu wyjścia. –