În primul rând, avem 100 de mesaje neprocesate pe serverul nostru rabbitmq, deschidem un client consumer aleatoriu și apare următoarea situație,
100 de date împinse într-o clipă, dar nu putem procesa atât de multe date simultan cu un singur client, ce ar trebui să facem?
Așa cum se vede în imaginea de mai sus, nu am confirmat primirea mesajului! Dacă producătorul continuă să o trimită, noi, consumatorii, o vom primi în continuare!
Imaginează-ți, dacă un singur consumator poate procesa până la 60 de mesaje în 1 minut, însă un producător poate trimite 300 de mesaje în 1 minut, dacă,Avem un client consumer care trebuie să primească 300 de mesaje simultan în 1 minut, ceea ce a depășit încărcarea maximă, ceea ce poate duce la epuizarea resurselor serverului și la blocarea clientului consumer。
RabbitMQ oferă o funcție qoS (Quality of Service), adică, sub premisa confirmării neautomate a mesajelor, dacă un anumit număr de mesaje (prin setarea valorii Qos pe baza consumului sau channel-ului) nu sunt confirmate, mesajele noi nu vor fi consumate.
prefetchSize:0 prefetchCount: Spune RabbitMQ să nu trimită mai mult de N mesaje către un consumator simultan, adică odată ce există N mesaje care nu au fost încă ack, consumatorul va bloca până când apare un mesaj ack global:true\false Indiferent dacă setările de mai sus se aplică canalelor, pe scurt, indiferent dacă restricțiile de mai sus sunt la nivel de canal sau la nivel de consumator
Notă: Se spune că prefetchSize și global nu sunt implementate de rabbitmq, așa că nu le voi studia deocamdată
prefetch_count intră în vigoare când no_ask=fals,Adică, în cazul răspunsului automat, aceste două valori suntNu este în practicăde
Setați prefetchCount = 3 prin metoda BasicQos. Acest lucru permite RabbitMQ să proceseze până la 3 mesaje per consumator simultan. Cu alte cuvinte, nu va distribui noi Mesaje către consumator până nu primește ack-ul. Iată cum să o configurezi:
După cum puteți vedea în figură, doi consumatori ascultă Queue în același timp, dar rețineți că mesajul de aici va fi accesat automat doar dacă este consumat de un singur consumator, iar celălalt consumator nu va primi din nou acest mesaj.
Introducere pe site-ul oficial: http://www.rabbitmq.com/consumer-prefetch.html
Rețineți că această metodă poate face ca coada să fie plină. Desigur, s-ar putea să fie nevoie să adaugi mai mulți consumatori sau să creezi mai multe virtualHost-uri pentru a-ți rafina designul.
|