Kai vartotojas gauna pranešimą ir apdorojimo užduotis yra baigta, jis siunčia ack su šiuo pranešimo identifikatoriumi, kad praneštų serveriui, kad pranešimas buvo gautas ir apdorojimas baigtas. "RabbitMQ" laukia, kol prarandama pranešimą apdorojančio vartotojo nuoroda, prieš nustatydama, kad pranešimas nebuvo tinkamai apdorotas, todėl "RabbitMQ" perduoda pranešimą iš naujo. Pranešimo patvirtinimas išjungtas pagal numatytuosius nustatymus. Inicijuojant vartotoją yra parametras noAck,Jei nustatyta kaip teisinga, vartotojas grąžins ack iš karto, kai tik gaus pranešimą。
Paprastai kalbant, dažniausiai naudojamas scenarijus paprastai nustatomas kaip teisingas, tačiau projektams, kuriems keliami dideli rizikos reikalavimai, pvz., mokėjimas. Kiekvienam pranešimui turime užtikrinti jo vientisumą ir teisingumą. Gavę pranešimą, turite patvirtinti, kad vykdoma teisinga verslo logika, ir tada aktyviai grąžinti ack į serverį. Eilėje esančius pranešimus galite peržiūrėti naudodami rabbitmqctl list_queues pavadinimą message_rady message_unacknowleded komandą arba fono valdymo sąsają.
Jei noAck nustatytas kaip false, klientas turi aktyviai siųsti ack į serverį, o jei klientas nepatvirtins pranešimo, susidarys tokia situacija:
Kol programa vis dar veikia, šie 10 pranešimų lieka neužfiksuoti ir RabbitMQ negali jų pristatyti iš naujo. Dar galingiau yra tai, kad"RabbitMQ" pranešimų vartojimas neturi skirtojo laiko mechanizmo, tai yra, jei programa nebus paleista iš naujo, pranešimas visada bus neužfiksuotas. Nepamirškite šių neužfiksuotų būsenos pranešimų, kai dirbate su operacijų įvykiais.
Paruošta
Šios būsenos pranešimai yra apdorojamoje eilėje.
Nepripažinta
Šios būsenos pranešimas rodo, kad jis jau apdorojamas, bet nepatvirtintas.
Kai programa uždaryta (kol vartotojas uždarytas), šie 10 pranešimų grįš į būseną Paruošta.
Patvirtinimo pranešimas
Ką daryti, jei klientas siunčia ack į serverį? Tai yra, patvirtinti pranešimo gavimą? Kodas yra toks:
Kai antrasis "BasicAck" metodo parametras, keli, nustatytas kaip false, tai reiškia, kad "RabbitMQ" pranešama, kad dabartinis pranešimas buvo patvirtintas.Jei teisinga, bus patvirtintas papildomas pranešimas, mažesnis už pirmojo parametro nurodytą pristatymo žymą。 (Masinis patvirtinimas skirtas visam kanalui)
Atšaukti patvirtinimą
Ką daryti, jei vienas iš paskirstytos programos klientų turi išimtį ir nori atšaukti pranešimo patvirtinimą ir leisti kitiems klientams apdoroti pranešimą?
Kai vartojimo pranešime yra išimtis, turime atšaukti patvirtinimą ir tada galime naudoti pagrindinį kanalo metodą.
Pirmasis parametras nurodo pristatymo žymę, o antrasis parametras aprašo, kaip tvarkyti šį gedimo pranešimą.Reikšmė true reiškia, kad pranešimas vėl įkeliamas į eilės antraštę, o reikšmė false reiškia, kad pranešimas atsisakomas。
|