Kui tarbija sõnumi kätte saab ja töötlemisülesanne on lõpetatud, saadab ta selle sõnumi identifikaatoriga ack, et teavitada serverit, et sõnum on vastu võetud ja töötlemine on lõpetatud. RabbitMQ ootab, kuni tarbija link sõnumit töötleb kaob, enne kui otsustab, et sõnumit ei ole õigesti töödeldud, seega edastab RabbitMQ sõnumi uuesti. Sõnumi kinnitus on vaikimisi välja lülitatud. Consumeri initsialiseerimisel on olemas noAck parameeter,Kui seatud tõele, tagastab tarbija ack'i kohe, kui sõnumi saab。
Üldiselt on levinud stsenaarium noack seatud tõele, kuid projektide puhul, millel on kõrge riskiga nõuded, näiteks tasu. Iga sõnumi puhul peame tagama selle terviklikkuse ja korrektsuse. Pärast sõnumi saamist pead kinnitama, et õige äriloogika on täidetud, ja seejärel aktiivselt serverile ACK-i tagastama. Saad järjekorras olevaid sõnumeid vaadata rabbitmqctl list_queues nime message_rady message_unacknowleded käsu kaudu või taustahalduse liidese kaudu.
Kui noAck on seatud vääraks, peab klient aktiivselt saatma ACK-i serverile ning kui klient sõnumit ei kinnita, tekib järgmine olukord:
Nii kaua kui programm töötab, jäävad need 10 sõnumit tähelepanuta ega saa RabbitMQ neid uuesti edastada. Veelgi võimsam on see, etRabbitMQ sõnumite tarbimisel puudub ajapiirangu mehhanism, see tähendab, et kui programmi ei taaskäivitata, on sõnum alati Unacked-olekus. Ära unusta neid hoolimatuid olekusõnumeid, kui töötad operatsioonide sündmustega.
Valmis
Selle staatusega sõnumid on järjekorras, mida töödeldakse.
Tunnustamata
Selles olekus olev sõnum näitab, et seda juba töödeldakse, kuid seda ei kinnitata.
Kui programm on suletud (seni kuni tarbija on suletud), naasevad need 10 sõnumit valmisolekusse.
Kinnitussõnum
Mis siis, kui klient saadab serverile ack'i? See tähendab, et kinnitada sõnumi kättesaamist? Kood on järgmine:
Kui BasicAck meetodi teine parameeter, mitmekordne, on seatud vääraks, tähendab see, et RabbitMQ saab teate, et praegune sõnum on kinnitatud.Kui see on tõene, kinnitatakse täiendav sõnum, mis on väiksem kui esimese parameetri määratud tarnesilt。 (Täielik kinnitus kehtib kogu kanali kohta)
Tühista kinnitus
Mis saab siis, kui ühel hajutatud programmi kliendil on erand ja ta soovib sõnumi kinnitamise tühistada ning lasta teistel klientidel sõnumit töödelda?
Kui tarbimissõnumis on erand, peame kinnituse tühistama ja seejärel saame kasutada Channel'i basicReject meetodit.
Esimene parameeter määrab tarnesildi ja teine parameeter kirjeldab, kuidas seda rikkesõnumit käsitleda.Väärtus tõene tähendab, et sõnum pannakse tagasi järjekorra päisse ja väär väärtus tähendab, et sõnum on hüljatud。
|