V prvom rade máme na našom rabbitmq serveri 100 nespracovaných správ, náhodne otvoríme spotrebiteľského klienta a objaví sa nasledujúca situácia,
100 dát, všetky sa posunú v okamihu, ale nemôžeme spracovať toľko dát naraz s jedným klientom, čo by sme mali robiť?
Ako je vidieť na obrázku vyššie, nepotvrdili sme prijatie správy! Ak výrobca bude naďalej posielať objednávky, my spotrebitelia ich budeme naďalej dostávať!
Len si predstavte, že my, jeden spotrebiteľ, dokážeme spracovať až 60 správ za 1 minútu, avšak producent môže poslať 300 správ za 1 minútu, ak,Máme spotrebiteľského klienta, ktorý musí prijať 300 správ naraz za 1 minútu, čo prekročilo naše maximálne zaťaženie, čo môže viesť k vyčerpaniu serverových zdrojov a zaseknutiu spotrebiteľského klienta。
RabbitMQ poskytuje funkciu qoS (Quality of Service), teda podľa predpokladu neautomatického potvrdenia správ, ak určitý počet správ (nastavením hodnoty Qos na základe spotreby alebo kanála) nie je potvrdený, nové správy sa nespotrebujú.
prefetchSize:0 prefetchCount: Hovorí RabbitMQ, aby neposielal spotrebiteľovi naraz viac ako N správ, t.j. keď je N správ, ktoré ešte neboli ackované, spotrebiteľ zablokuje, kým nebude hlásenie odoslané global:true\false Či sa vyššie uvedené nastavenia vzťahujú na kanály, jednoducho povedané, či už sú uvedené obmedzenia na úrovni kanálov alebo na úrovni spotrebiteľa
Poznámka: Hovorí sa, že prefetchSize a global nie sú implementované rabbitmq, takže ich zatiaľ nebudem študovať
prefetch_count nadobúda účinok, keď no_ask=nepravda,To znamená, že v prípade automatického odpovedania sú tieto dve hodnotyNie je v platnostiz
Nastavte prefetchCount = 3 pomocou metódy BasicQos. To umožňuje RabbitMQ spracovať až 3 správy na jedného používateľa naraz. Inými slovami, nebude distribuovať nové správy spotrebiteľovi, kým nedostane ACK. Tu je návod, ako to nastaviť:
Ako vidíte na obrázku, dvaja spotrebitelia počúvajú Queue súčasne, ale všimnite si, že správa tu bude automaticky prijatá len vtedy, ak ju spotrebuje jeden spotrebiteľ, a druhý spotrebiteľ túto správu už nedostane znova.
Oficiálny úvod na webovej stránke: http://www.rabbitmq.com/consumer-prefetch.html
Všimnite si, že táto metóda môže spôsobiť, že fronta bude plná. Samozrejme, možno budete musieť pridať viac Consumers alebo vytvoriť viac virtualHostov, aby ste vylepšili svoj dizajn.
|