Ko uporabnik prejme sporočilo in je obdelava zaključena, pošlje ack s tem identifikatorjem sporočila, da strežniku sporoči, da je sporočilo prejeto in da je obdelava zaključena. RabbitMQ počaka, da se izgubi povezava uporabnika, ki obdeluje sporočilo, preden ugotovi, da sporočilo ni bilo pravilno obdelano, zato RabbitMQ ponovno pošlje sporočilo. Potrditev sporočila je privzeto izklopljena. Pri inicializaciji Consumerja obstaja parameter noAck,Če je nastavljeno na true, bo potrošnik takoj po prejemu sporočila vrnil ack。
Na splošno je pogosto uporabljeni scenarij noack nastavljen na true, vendar za projekte z visokimi tveganji, kot je plačilo. Za vsako sporočilo moramo zagotoviti njegovo integriteto in pravilnost. Ko prejmete sporočilo, morate potrditi, da je poslovna logika pravilno izvedena, nato pa aktivno vrniti odpoved strežniku. Sporočila v vrsti si lahko ogledate preko rabbitmqctl list_queues ime message_rady message_unacknowleded ukaz ali preko vmesnika za upravljanje v ozadju.
Če je noAck nastavljen na false, mora odjemalec aktivno poslati ack strežniku, in če odjemalec sporočila ne potrdi, se zgodi naslednja situacija:
Dokler program teče, teh 10 sporočil ostane neuporabljenih in jih RabbitMQ ne more ponovno dostaviti. Še močnejše pa je, daPoraba sporočil v RabbitMQ nima mehanizma za časovno omejitev, to pomeni, da če program ni ponovno zaganjen, bo sporočilo vedno v stanju Unaced. Ne pozabite na ta odprta sporočila o stanju, ko delate na operativnih dogodkih.
Pripravljeni
Sporočila s tem statusom obstajajo v vrsti za obdelavo.
Nepriznano
Sporočilo v tem statusu pomeni, da je že v obdelavi, vendar ni potrjeno.
Ko je program zaprt (dokler je Consumer zaprt), se teh 10 sporočil vrne v stanje Pripravljeno.
Potrditveno sporočilo
Kaj pa, če odjemalec pošlje ACK strežniku? Torej, potrditi prejem sporočila? Koda je naslednja:
Ko je drugi parameter metode BasicAck, multiple, nastavljen na false, to pomeni, da je RabbitMQ obveščen, da je bilo trenutno sporočilo potrjeno.Če je to res, bo dodatno sporočilo, manjše od oznake dostave, določene s prvim parametrom, potrjeno。 (Množična potrditev velja za celoten kanal)
Prekliči potrditev
Kaj pa, če ima eden od odjemalcev distribuiranega programa izjemo in želi preklicati potrditev sporočila ter dovoliti drugim odjemalcem, da sporočilo obdelajo?
Ko je v sporočilu o porabi izjema, moramo potrditev preklicati, nato pa lahko uporabimo osnovno metodo Zavrni, imenovano Channel.
Prvi parameter določa oznako dostave, drugi parameter pa opisuje, kako obravnavati to sporočilo o napaki.Vrednost resnično pomeni, da je sporočilo vrnjeno v glavo vrste, vrednost false pa pomeni, da je sporočilo opuščeno。
|