Acest articol este un articol oglindă al traducerii automate, vă rugăm să faceți clic aici pentru a sări la articolul original.

Vedere: 23648|Răspunde: 0

Limita procesării paralele pentru consumatori RabbitMQ BasicQos

[Copiază linkul]
Postat pe 10.04.2018 22:36:02 | | | |


Î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=falsAdică, î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.





Precedent:EF implementează inserări, actualizări și ștergeri în masă ale bazelor de date
Următor:Serverul web IIS Express nu a putut fi pornit
Disclaimer:
Tot software-ul, materialele de programare sau articolele publicate de Code Farmer Network sunt destinate exclusiv scopurilor de învățare și cercetare; Conținutul de mai sus nu va fi folosit în scopuri comerciale sau ilegale, altfel utilizatorii vor suporta toate consecințele. Informațiile de pe acest site provin de pe Internet, iar disputele privind drepturile de autor nu au legătură cu acest site. Trebuie să ștergi complet conținutul de mai sus de pe calculatorul tău în termen de 24 de ore de la descărcare. Dacă îți place programul, te rugăm să susții software-ul autentic, să cumperi înregistrarea și să primești servicii autentice mai bune. Dacă există vreo încălcare, vă rugăm să ne contactați prin e-mail.

Mail To:help@itsvse.com