Keď spotrebiteľ správu prijme a úloha spracovania je dokončená, pošle ACK s týmto identifikátorom správy, aby serveru oznámil, že správa bola prijatá a spracovanie je dokončené. RabbitMQ čaká, kým sa stratí spojenie spotrebiteľa spracúvajúceho správu, aby zistilo, že správa nebola správne spracovaná, takže RabbitMQ správu znovu odošle. Potvrdenie správy je predvolene vypnuté. Pri inicializácii Consumer existuje parameter noAck,Ak je nastavená na true, spotrebiteľ vráti ack hneď, ako správu dostane。
Všeobecne platí, že bežne používaný scenár noack je nastavený na true, ale pre projekty s vysokými rizikovými požiadavkami, ako je platba. Pre každé posolstvo musíme zabezpečiť jeho integritu a správnosť. Po získaní správy musíte potvrdiť, že bola vykonaná správna obchodná logika, a potom aktívne vrátiť hlásenie na server. Správy vo fronte si môžete prezerať cez rabbitmqctl list_queues názov message_rady message_unacknowleded príkaz alebo cez rozhranie správy na pozadí.
Ak je noAck nastavený na false, klient musí aktívne odoslať ack serveru, a ak klient správu nepotvrdí, nastane nasledujúca situácia:
Pokým program beží, týchto 10 správ zostáva nevyužitých a RabbitMQ ich nemôže znovu doručiť. Ešte silnejšie je, žeSpotreba správ v RabbitMQ nemá mechanizmus časového limitu, to znamená, že ak program nie je reštartovaný, správa bude vždy v stave Unaced. Nezabúdajte na tieto neporušené správy o stave pri práci na operačných udalostiach.
Pripravený
Správy s týmto stavom existujú vo fronte na spracovanie.
Neuznané
Správa v tomto stave znamená, že už je spracovaná, ale nie je potvrdená.
Keď je program zatvorený (pokiaľ je zatvorený spotrebiteľ), týchto 10 správ sa vráti do stavu Pripravené.
Potvrdenie správy
Čo ak klient pošle serveru upozornenie? Teda potvrdiť prijatie správy? Kód je nasledovný:
Keď je druhý parameter metódy BasicAck, multiple, nastavený na false, znamená to, že RabbitMQ je upozornený, že aktuálna správa bola potvrdená.Ak je to pravda, bude potvrdená ďalšia správa menšia ako dodacia značka špecifikovaná prvým parametrom。 (Hromadné potvrdenie je pre celý kanál)
Potvrdenie zrušenia
Čo ak má jeden z klientov distribuovaného programu výnimku a chce zrušiť potvrdenie správy a nechať správu spracovať iní klienti?
Keď je v správe o spotrebe výnimka, musíme potvrdenie zrušiť a potom môžeme použiť základnú metódu Odmietnuť (Channel).
Prvý parameter určuje dodaciu značku a druhý parameter popisuje, ako túto správu o zlyhaní spracovať.Hodnota true znamená, že správa je vrátená do hlavičky fronty, a hodnota false znamená, že správa je opustená。
|