2013-10-03 14 views
15

Używam RabbitMQ pomyślnie. Mam jednak problem, gdy dostanę się do sytuacji, w której w kolejce jest dużo wiadomości, wtedy konsument (usługa Windows) próbuje je wszystkie, a następnie po prostu je przytrzymuje, ale nigdy nie podejmuje działań lub je potwierdza.RabbitMQ jak dławić konsumenta

Gdy liczba wiadomości w stanie gotowości jest niska, konsumenci zajmują się grzywną za przepustowość, to tylko jeśli wystąpił problem i jest zaległości, wtedy staje się zbyt chciwy.

Czy istnieje sposób skonfigurowania maksymalnej liczby wiadomości, za które konsument będzie się starał i za które ponosi odpowiedzialność za jednym razem?

Widzę pole RequestedChannelMax na RabbitMQ.Client.ConnectionFactory czy to właściwe ustawienie ogranicza to?

Dzięki

+0

Powiązane: http://stackoverflow.com/questions/29841690/how-to-consume-one-message – Nav

Odpowiedz

21

konsumentem, domyślnie będzie czytać jak najwięcej wiadomości, jak przepustowość może obsługiwać niezależnie od rzeczywistego czasu przetwarzania wiadomości przez konsumenta.

Musisz ustawić wartości pobierania wstępnego, modyfikując jakość usługi (QoS) kanału, aby ograniczyć liczbę wiadomości, które spróbuje odebrać za jednym razem. Sprawdź basic.qos here. Ma 3 parametry, wielkość (w oktetach), liczbę (liczbę wiadomości, które odbierze jednocześnie) i flagę globalną.

This blog post to ciekawa lektura, jeśli interesuje Cię optymalizacja przepustowości i rozmowy o pobieraniu wstępnym około 2/3 drogi w dół strony.

Nadzieję, że pomaga!

+1

Dzięki temu jest to bardzo wyczerpująca odpowiedź i doprowadziła mnie do tego, czego potrzebowałem. '_model.BasicQos (0,100, fałsz);' – baynezy

Powiązane problemy