Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 23648|Odpowiedź: 0

RabbitMQ BasicQos konsumenckie ograniczenia przetwarzania równoległego

[Skopiuj link]
Opublikowano 10.04.2018 22:36:02 | | | |


Po pierwsze, mamy 100 nieprzetworzonych wiadomości na naszym serwerze rabbitmq, losowo otwieramy klienta konsumenckiego i pojawia się następująca sytuacja,

100 danych, wszystkie przedane w mgnieniu oka, ale nie możemy przetwarzać tylu danych naraz z jednym klientem, co powinniśmy zrobić?




Jak pokazano na powyższym obrazku, nie potwierdziliśmy otrzymania wiadomości! Jeśli producent będzie dalej wysyłał materiał, my, konsumenci, będziemy je nadal otrzymywać!

Wyobraź sobie, że my, pojedynczy konsument, możemy przetworzyć do 60 wiadomości w 1 minutę, natomiast producent może wysłać 300 wiadomości w 1 minutę, jeśli,Mamy klienta konsumenckiego, który musi odebrać 300 wiadomości jednocześnie w ciągu 1 minuty, co przekroczyło nasze maksymalne obciążenie, co może prowadzić do wyczerpania zasobów serwera i zablokowania klienta klienta
RabbitMQ oferuje funkcję qoS (Quality of Service), to znaczy, na założeniu nieautomatycznego potwierdzenia wiadomości, jeśli nie zostanie potwierdzona określona liczba wiadomości (ustawiając wartość Qos na podstawie konsumpcji lub kanału), nowe wiadomości nie zostaną zużyte.



prefetchSize:0
prefetchCount: Mówi RabbitMQ, aby nie wysyłał więcej niż N wiadomości do konsumenta jednocześnie, tzn. gdy pojawi się N wiadomości, które jeszcze nie zostały ackowane, konsument zablokuje do momentu ackowania wiadomości
global:true\false Czy powyższe ustawienia dotyczą kanałów, mówiąc uprości, czy powyższe ograniczenia dotyczą poziomu kanałów czy konsumentów
Uwaga: Mówi się, że prefetchSize i global nie są implementowane przez rabbitmq, więc na razie nie będę ich studiować


prefetch_count wchodzi w życie, gdy no_ask=fałszyweTo znaczy, w przypadku automatycznej odpowiedzi, te dwie wartości toNie obowiązujeof

Ustaw prefetchCount = 3 za pomocą metody BasicQos. Pozwala to RabbitMQ przetwarzać do 3 wiadomości na jednego klienta jednocześnie. Innymi słowy, nie będzie rozesłaniać nowych wiadomości do konsumenta, dopóki nie otrzyma ACK. Oto jak to skonfigurować:





Jak widać na rysunku, dwóch konsumentów słucha Queue jednocześnie, ale należy zauważyć, że komunikat tutaj zostanie automatycznie zaakceptowany tylko wtedy, gdy jeden użytkownik go konsumuje, a drugi nie otrzyma go ponownie.

Oficjalne wprowadzenie do strony internetowej: http://www.rabbitmq.com/consumer-prefetch.html

Należy zauważyć, że ta metoda może powodować pełne kolejki. Oczywiście może być konieczne dodanie większej liczby konsumentów lub stworzenie więcej wirtualnych hostów, aby udoskonalić swój projekt.





Poprzedni:EF implementuje masowe wstawiania, aktualizacje i usuwanie baz danych
Następny:Serwer internetowy IIS Express nie mógł zostać uruchomiony
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com