Nejprve máme na našem rabbitmq serveru 100 nezpracovaných zpráv, náhodně otevřeme spotřebitelského klienta a objeví se následující situace,
100 dat, všechna přenesená během okamžiku, ale nemůžeme zpracovat tolik dat najednou s jedním klientem, co bychom měli dělat?
Jak je vidět na obrázku výše, nepotvrdili jsme přijetí zprávy! Pokud producent bude dál posílat zboží, my spotřebitelé ho budeme dál dostávat!
Představte si, že my, jediný spotřebitel, dokážeme zpracovat až 60 zpráv za 1 minutu, zatímco producent může poslat 300 zpráv za 1 minutu, pokud,Máme spotřebitelského klienta, který potřebuje přijmout 300 zpráv najednou za 1 minutu, což překročilo naše maximální zatížení, což může vést k vyčerpání serverových zdrojů a zaseknutí spotřebitelského klienta。
RabbitMQ nabízí funkci qoS (Quality of Service), tedy podle předpokladu neautomatického potvrzování zpráv, pokud není potvrzen určitý počet zpráv (nastavením hodnoty Qos na základě spotřeby nebo kanálu), nové zprávy nebudou konzumovány.
prefetchSize:0 prefetchCount: Říká RabbitMQ, aby neposílal spotřebiteli více než N zpráv najednou, tj. jakmile je N zpráv, které ještě nebyly ackovány, spotřebitel zablokuje, dokud nedojde k ackování zprávy global:true\false Ať už se výše uvedená nastavení vztahují na kanály, jednoduše řečeno, ať už jsou výše uvedená omezení na úrovni kanálů nebo na úrovni spotřebitelů
Poznámka: Říká se, že prefetchSize a global nejsou implementovány rabbitmq, takže je zatím nebudu studovat
prefetch_count nabývá účinnosti, když no_ask=nepravda,To znamená, že v případě automatického odpovídání jsou tyto dvě hodnotyNení v platnostiz
Nastavte prefetchCount = 3 pomocí metody BasicQos. To umožňuje RabbitMQ zpracovávat až 3 zprávy na jednoho uživatele současně. Jinými slovy, nebude distribuovat nové zprávy spotřebiteli, dokud neobdrží ACK. Tady je, jak to nastavit:
Jak můžete vidět na obrázku, Queue poslouchají současně dva spotřebitelé, ale všimněte si, že zpráva zde bude automaticky přijata pouze tehdy, pokud ji konzumuje jeden spotřebitel, a druhý spotřebitel tuto zprávu už nedostane znovu.
Oficiální web: http://www.rabbitmq.com/consumer-prefetch.html
Všimněte si, že tato metoda může způsobit, že fronta bude plná. Samozřejmě možná budete muset přidat více spotřebitelů nebo vytvořit více virtualHostů, abyste svůj design vylepšili.
|