Pēc noklusējuma rabbitMQ rindas ziņojumi netiek saglabāti cietajā diskā, kas nozīmē, ka pēc rabbitMQ pakalpojuma restartēšanas ziņojumi tiks zaudēti.
Rindu noturība
Piemēram, tiek identificēta rindas noturībadurableir iestatīts uz true, kas nozīmē, ka tā ir pastāvīga rinda, pēc tam pēc pakalpojuma restartēšanas tas arī pastāvēs, jo pakalpojums saglabās pastāvīgo rindu cietajā diskā, un, restartējot pakalpojumu, tas atjaunos iepriekš saglabāto rindu. Rindu var saglabāt, bet tas, vai ziņojumi ir pastāvīgi, ir atkarīgs no ziņojuma noturības iestatījumiem. Citiem vārdiem sakot, ja pirms restartēšanas rindā nav nosūtīts neviens ziņojums, tas, vai sākotnējais ziņojums joprojām pastāv rindā pēc restartēšanas, ir atkarīgs no ziņojuma iestatījumiem, kas tika nosūtīti. Ja vēlaties, lai ziņojumi pēc restartēšanas būtu noturīgi, ir jāiestata identitāte, ka ziņojums ir saglabājams.
Rindas noturības iestatīšana:
Metodes ceturtais parametrs, autoDelete, parasti tiek ievadīts nepatiess. Dokumentācijā šis parametrs ir aprakstīts, ja tas ir patiess, kas nozīmē, ka, ja rinda vairs netiek izmantota (nav abonēta), serveris to izdzēš. Manas testēšanas laikā, kamēr visi savienojuma maiņas rindas adresāti ir atvienoti, rinda tiek izdzēsta, pat ja tajā joprojām ir neapstrādāti ziņojumi. RabbitMQ restartēšana tos arī noņems. Ja tiek ievadīts false, pakalpojums neizdzēsīs rindu, un ziņojumi rindā pastāvēs, ja visi ar to saistītie klienti būs atvienoti. Sūtītājs var arī ievietot ziņojumus izmaiņu rindā, ja nav klienta savienojuma, un, kad klients parādās, tas saņems šos ziņojumus. Tomēr, ja RabbitMQ pakalpojums tiek restartēts, rinda pazudīs, un tajā esošie ziņojumi, protams, pazudīs.
Trešais parametrs ir ekskluzīvs, un dokumentācijā norādīts, ka, ja taisnība, tad rindas savienojums ir pārtraukts, tad rinda tiek izdzēsta, ieskaitot ziņojumus.
Otrais parametrs, izturīgs, dokumentācijā ir aprakstīts, ka, ja tas ir patiess, tas ir pastāvīga rinda, kas pastāvēs arī pēc pakalpojuma restartēšanas. Tā kā pakalpojums saglabās pastāvīgo rindu cietajā diskā un, kad pakalpojums tiks restartēts, tas atkārtoti apstiprinās šo rindu. Protams, tam jābūt tad, kad gan automātiskā dzēšana, gan ekskluzīva ir nepatiesa. Rindu var saglabāt, bet tas, vai ziņojumi ir pastāvīgi, ir atkarīgs no ziņojuma noturības iestatījumiem. Citiem vārdiem sakot, ja pirms restartēšanas rindā joprojām ir nosūtīti ziņojumi, tas, vai sākotnējais ziņojums joprojām pastāv rindā pēc restartēšanas, ir atkarīgs no sūtītāja ziņojuma iestatījumiem, nosūtot ziņojumu.
Pēc koda modificēšanas mēs mēģinām to palaist, un kļūda būs šāda:
Neapstrādāts izņēmums: RabbitMQ.Client.Exceptions.OperationInterruptedException: AMQP operācija tika pārtraukta: AMQP tuvuma iemesls, ko uzsāka Peer, code=406, text="PRECONDITION_FAILED - neekvivalents arg 'izturīgs' rindai 'hello' vhost 'myserver': saņemts 'true', bet pašreizējais ir 'false'", classId=50, methodId=10, cause=
Jo mēs esam definējuši nepastāvīgu rindu ar nosaukumu sveiki. RabbitMQ neļauj pārdefinēt esošās rindas ar dažādiem parametru iestatījumiem.
Ir divi risinājumi:
1: atkārtoti deklarējiet rindu ar citu nosaukumu, piemēram, my_queue 2: Izdzēsiet definēto "sveiki" rindu ar http://localhost:15672 adresi un piesakieties ar lietotājvārdu un paroli. RabbitMQ noklusējuma parole un lietotājvārds ir viesis. Noklikšķiniet uz kolonnas "rinda", lai redzētu rindu sarakstu, noklikšķiniet uz rindas "sveiki", lai izvērstu rindas informāciju. Pavelciet lapu līdz galam, ir vienums "Dzēst", noklikšķiniet uz tā, noklikšķiniet uz pogas "Dzēst rindu", un jūs varat izdzēst rindu. Tad, kad kods tiek izpildīts, tiek izveidota sveika rinda, kas atbalsta noturību.
Ziņojumu noturība
Ja vēlaties, lai ziņojums pēc restartēšanas būtu pastāvīgs, ziņojums ir jāiestata uz pastāvēšanu. Iestatījums ir tad, kad sūtītājs to nosūta, kas ir salīdzinoši vienkārši, un kods ir šāds:
DeliveryMode noklusējuma vērtība ir 1, nepastāvīga, un iestatīšana uz 2 nozīmē, ka ziņojums ir pastāvīgs
Pēc koda modificēšanas mēs cenšamies atvērt tikai ražotāja programmu, lai nosūtītu ziņojumus, un pēc tam restartējiet rabbitMQ pakalpojumu, vēlreiz atveriet patērētāju un konstatējiet, ka ziņojums nav zaudēts.
(Beigas)
Pievienots C# avota kods:
Tūristi, ja vēlaties redzēt šīs ziņas slēpto saturu, lūdzu Atbildi
|