Kun kuluttaja vastaanottaa viestin ja käsittelytehtävä on suoritettu, se lähettää ack-viestin tällä viestitunnisteella ilmoittaakseen palvelimelle, että viesti on vastaanotettu ja käsittely on valmis. RabbitMQ odottaa, kunnes käyttäjän viestiä käsittelevä linkki katoaa, ennen kuin toteaa, ettei viestiä ole käsitelty oikein, joten RabbitMQ lähettää viestin uudelleen. Viestin kuittaus on oletuksena pois päältä. Consumerin alustuksessa on noAck-parametri,Jos asetuksena on true, kuluttaja palauttaa ack-vastauksen heti viestin saatuaan。
Yleisesti käytetty skenaario noack on yleensä asetettu todeksi, mutta projekteissa, joissa on korkean riskin vaatimukset, kuten maksu. Jokaisen viestin kohdalla meidän täytyy varmistaa sen eheys ja oikeellisuus. Kun viesti on saatu, sinun täytyy varmistaa, että oikea liiketoimintalogiikka on suoritettu, ja palauttaa aktiivisesti ack palvelimelle. Voit tarkastella viestejä jonossa rabbitmqctl list_queues nimen message_rady message_unacknowleded komennon kautta tai taustahallinnan käyttöliittymän kautta.
Jos noAck on asetettu epätosi, asiakkaan täytyy aktiivisesti lähettää ack palvelimelle, ja jos asiakas ei vahvista viestiä, tapahtuu seuraava tilanne:
Niin kauan kuin ohjelma on käynnissä, nämä 10 viestiä pysyvät huomaamattomina eikä RabbitMQ voi toimittaa niitä uudelleen. Vielä voimakkaampaa on se, ettäRabbitMQ-viestinkulutuksessa ei ole aikakatkaisumekanismia, eli jos ohjelmaa ei käynnistetä uudelleen, viesti on aina Unacked-tilassa. Älä unohda näitä huomaamattomia tilaviestejä työskennellessäsi operaatioiden tapahtumien parissa.
Valmiina
Tämän tilan viestit ovat jonossa käsiteltäväksi.
Tunnustamaton
Tässä tilassa oleva viesti osoittaa, että sitä käsitellään jo, mutta sitä ei kuvastata.
Kun ohjelma on suljettu (niin kauan kuin kuluttaja on suljettu), nämä 10 viestiä palaavat valmiustilaan.
Vahvistusviesti
Entä jos asiakas lähettää ackin palvelimelle? Eli vahvistaa viestin vastaanotto? Koodi on seuraava:
Kun BasicAck-metodin toinen parametri, moninkertainen, asetetaan epätosi, se tarkoittaa, että RabbitMQ saa ilmoituksen, että nykyinen viesti on kuitoitettu.Jos tämä on totta, vahvistetaan lisäviesti, joka on pienempi kuin ensimmäisen parametrin määrittelemä toimitustunniste。 (Massavahvistus koskee koko kanavaa)
Peruuta vahvistus
Entä jos jollain hajautetun ohjelman asiakkaalla on poikkeus ja hän haluaa peruuttaa viestin vahvistuksen ja antaa muiden asiakkaiden käsitellä viestin?
Kun kulutusviestissä on poikkeus, vahvistus täytyy peruuttaa, ja sitten voimme käyttää Channelin basicEject-menetelmää.
Ensimmäinen parametri määrittää toimitustunnisteen, ja toinen parametri kuvaa, miten tämä vikaviesti käsitellään.Arvo tosi tarkoittaa, että viesti palautetaan jonon otsikkoon, ja väärin arvo tarkoittaa, että viesti hylätään。
|