Ensinnäkin meillä on 100 käsittelemätöntä viestiä rabbitmq-palvelimellamme, avaamme kuluttajaasiakkaan satunnaisesti, ja seuraava tilanne ilmestyy,
100 tietoa, kaikki siirretty hetkessä, mutta emme voi käsitellä niin paljon dataa yhtä aikaa yhdellä asiakkaalla, mitä meidän pitäisi tehdä?
Kuten yllä olevasta kuvasta näkyy, emme vahvistaneet viestin vastaanottoa! Jos tuottaja jatkaa niiden lähettämistä, me kuluttajat saamme sen jatkossakin!
Kuvittele, jos me yksittäinen kuluttaja voimme käsitellä jopa 60 viestiä yhdessä minuutissa, mutta tuottaja voi lähettää 300 viestiä minuutissa, jos,Meillä on kuluttajaasiakasohjelma, joka tarvitsee vastaanottaa 300 viestiä samanaikaisesti minuutissa, mikä on ylittänyt maksimikuormamme, mikä voi johtaa palvelinresurssien loppuun ja kuluttajaasiakkaan jumiutumiseen。
RabbitMQ tarjoaa qoS-ominaisuuden (Quality of Service), eli ei-automaattisen viestien vahvistuksen periaatteella, jos tietty määrä viestejä (asettamalla Qos-arvo kuluttajan tai kanavan perusteella) ei vahvistu, uusia viestejä ei kuluteta.
prefetchSize:0 prefetchCount: Käskee RabbitMQ:ta olemaan lähettämättä kuluttajalle enempää kuin N viestiä samanaikaisesti, eli kun on N viestiä, joita ei ole vielä hyväksytty, kuluttaja estää, kunnes viesti on vastaanotettu global:true\false Riippumatta siitä, sovelletaanko yllä mainitut asetukset kanaville, yksinkertaisesti sanottuna, ovatko yllä mainitut rajoitukset kanavatasolla vai kuluttajatasolla
Huomautus: Sanotaan, että prefetchSize ja global eivät ole rabbitmq:n toteuttamia, joten en aio tutkia niitä toistaiseksi
prefetch_count tulee voimaan, kun no_ask=epätosi,Eli automaattivastauksessa nämä kaksi arvoa ovatEi voimassaof
Aseta prefetchCount = 3 BasicQos-menetelmällä. Tämä mahdollistaa RabbitMQ:n käsitellä jopa 3 viestiä per kuluttaja samanaikaisesti. Toisin sanoen, se ei jaa uusia viestejä kuluttajalle ennen kuin vastaanotto on vastaanotettu. Näin sen voi asettaa:
Kuten kuvasta näkyy, jonoa kuuntelee samanaikaisesti kaksi kuluttajaa, mutta huomaa, että viesti täällä veloitetaan automaattisesti vain, jos toinen kuluttaja kuluttaa sen, eikä toinen kuluttaja saa tätä viestiä uudelleen.
Virallinen verkkosivuston esittely: http://www.rabbitmq.com/consumer-prefetch.html
Huomaa, että tämä menetelmä voi aiheuttaa jonon täyttymisen. Tietenkin saatat joutua lisäämään lisää kuluttajia tai luomaan lisää virtuaalisäntiä suunnittelun hiomiseksi.
|