Kad patērētājs saņem ziņojumu un apstrādes uzdevums ir pabeigts, tas nosūtīs ack ar šo ziņojuma identifikatoru, lai paziņotu serverim, ka ziņojums ir saņemts un apstrāde ir pabeigta. RabbitMQ gaida, līdz tiek zaudēta patērētāja, kas apstrādā ziņojumu, saite, pirms nosaka, ka ziņojums nav pareizi apstrādāts, tāpēc RabbitMQ pārsūta ziņojumu. Ziņojuma apstiprinājums pēc noklusējuma ir izslēgts. Inicializējot patērētāju, ir noAck parametrs,Ja iestatīts uz true, patērētājs atgriezīs ack tiklīdz tas saņems ziņojumu。
Vispārīgi runājot, bieži izmantotais scenārijs parasti ir iestatīts uz patiesu, bet projektiem ar augsta riska prasībām, piemēram, maksājumiem. Katram ziņojumam mums ir jānodrošina tā integritāte un pareizība. Pēc ziņojuma saņemšanas jums jāapstiprina, ka tiek izpildīta pareizā biznesa loģika, un pēc tam aktīvi jāatgriež serverī. Rindā esošos ziņojumus var apskatīt, izmantojot rabbitmqctl list_queues nosaukumu message_rady message_unacknowleded komandu vai fona pārvaldības interfeisu.
Ja noAck ir iestatīts uz false, klientam ir aktīvi jānosūta ack uz serveri, un, ja klients neapstiprina ziņojumu, radīsies šāda situācija:
Kamēr programma joprojām darbojas, šie 10 ziņojumi paliek neapmierināti, un RabbitMQ tos nevar atkārtoti piegādāt. Vēl spēcīgāk ir tas, kaRabbitMQ ziņojumu patēriņam nav taimauta mehānisma, tas ir, ja programma netiek restartēta, ziņojums vienmēr būs stāvoklī Unacked. Neaizmirstiet šos neapzinātos stāvokļa ziņojumus, strādājot pie operāciju notikumiem.
Gatavs
Apstrādājamajā rindā ir ziņojumi ar šādu statusu.
Neatzīts
Ziņojums šādā statusā norāda, ka tas jau tiek apstrādāts, bet nav apstiprināts.
Kad programma ir aizvērta (kamēr patērētājs ir aizvērts), šie 10 ziņojumi atgriezīsies stāvoklī Gatavs.
Apstiprinājuma ziņojums
Ko darīt, ja klients nosūta ack uz serveri? Tas ir, apstipriniet ziņojuma saņemšanu? Kods ir šāds:
Ja BasicAck metodes otrais parametrs, vairāki, ir iestatīts uz false, tas nozīmē, ka RabbitMQ tiek paziņots, ka pašreizējais ziņojums ir apstiprināts.Ja tas ir patiess, tiks apstiprināts papildu ziņojums, kas ir mazāks par piegādes tagu, ko norāda pirmais parametrs。 (Lielapjoma apstiprinājums attiecas uz visu kanālu)
Atcelt apstiprinājumu
Ko darīt, ja kādam no izplatītās programmas klientiem ir izņēmums un viņš vēlas atcelt ziņojuma apstiprinājumu un ļaut citiem klientiem apstrādāt ziņojumu?
Ja patēriņa ziņojumā ir izņēmums, mums ir jāatceļ apstiprinājums, un pēc tam mēs varam izmantot kanāla basicReject metodi.
Pirmais parametrs norāda piegādes tagu, bet otrais parametrs apraksta, kā apstrādāt šo kļūmes ziņojumu.Vērtība true nozīmē, ka ziņojums tiek ievietots atpakaļ rindas galvenē, un vērtība false nozīmē, ka ziņojums ir pamests。
|