Najprej imamo na našem rabbitmq strežniku 100 neobdelanih sporočil, naključno odpremo potrošniškega odjemalca in pojavi se naslednja situacija,
100 kosov podatkov, vsi v hipu, a ne moremo obdelati toliko podatkov hkrati z enim odjemalcem, kaj naj storimo?
Kot je prikazano na zgornji sliki, nismo potrdili prejema sporočila! Če bo proizvajalec še naprej pošiljal, ga bomo mi potrošniki še naprej prejemali!
Samo predstavljajte si, če lahko mi posamezni potrošniki obdelamo do 60 sporočil v eni minuti, medtem ko lahko proizvajalec pošlje 300 sporočil v eni minuti, če,Imamo potrošniškega odjemalca, ki mora prejeti 300 sporočil hkrati v eni minuti, kar je preseglo našo največjo obremenitev, kar lahko povzroči izčrpanost strežniških virov in zataknjenje potrošniškega odjemalca。
RabbitMQ ponuja funkcijo qoS (Quality of Service), torej pod predpostavko neavtomatskega potrjevanja sporočil, če določeno število sporočil (z nastavitvijo vrednosti Qos na podlagi potrošnje ali kanala) ni potrjeno, novih sporočil ne bomo porabili.
prefetchSize:0 prefetchCount: Pove RabbitMQ, naj ne pošilja več kot N sporočil potrošniku hkrati, tj. ko je N sporočil, ki še niso bila ackirana, bo uporabnik blokiral, dokler ne pride do ACK sporočil global:true\false Ne glede na to, ali se zgornje nastavitve nanašajo na kanale, preprosto povedano, ne glede na to, ali so zgornje omejitve na ravni kanalov ali na ravni uporabnikov
Opomba: Pravi se, da prefetchSize in global nista implementirana v rabbitmq, zato ju za zdaj ne bom preučeval
prefetch_count začne veljati, ko no_ask=napačno,To pomeni, da sta pri samodejnem odgovarjanju ti dve vrednostiNi v veljaviod
Nastavi prefetchCount = 3 z metodo BasicQos. To omogoča RabbitMQ, da hkrati obdela do 3 sporočila na uporabnika. Z drugimi besedami, novih sporočil potrošniku ne bo distribuiral, dokler ta ne prejme ACK. Tukaj je, kako to nastaviti:
Kot lahko vidite na sliki, poslušata Queue hkrati dva potrošnika, vendar upoštevajte, da bo sporočilo tukaj samodejno sprejeto le, če ga porabi en uporabnik, drugi potrošnik pa tega sporočila ne bo več prejel.
Uradni uvod na spletno stran: http://www.rabbitmq.com/consumer-prefetch.html
Upoštevajte, da lahko ta metoda povzroči, da je vrsta polna. Seveda boste morda morali dodati več uporabnikov ali ustvariti več virtualnih gostiteljev, da izboljšate svoj dizajn.
|