Šis raksts ir mašīntulkošanas spoguļraksts, lūdzu, noklikšķiniet šeit, lai pārietu uz oriģinālo rakstu.

Skats: 44647|Atbildi: 8

[WinForm] rabbitMQ rindas rindas ziņojuma noturība [ar avota kodu]

[Kopēt saiti]
Publicēts 09.04.2018 10:23:21 | | | |
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ūdzuAtbildi





Iepriekšējo:Izņēmuma ziņojums: "StrongTypingException: IsPrima...
Nākamo:Ievads par C# delegātiem (delegāts, darbība, funkcija, predikāts)
Publicēts 09.04.2018 13:17:51 |
Iemācieties mācīties
Publicēts 25.06.2019 23:22:47 |
Iemācieties mācīties
Publicēts 29.06.2019 09:36:23 |
Kāpēc es neredzēju demonstrāciju, man jāatbild, lai to redzētu
Publicēts 09.07.2019 17:34:42 |
Es vēlos C# avota kodu
Publicēts 24.07.2019 14:21:51 |
Tas ir labi, tas ir tieši tas, kas man vajadzīgs
Publicēts 11.04.2020 14:34:54 |
Uzziniet to
Publicēts 01.01.2022 14:45:24 |
1111111111111111
 Saimnieks| Publicēts 03.05.2023 22:12:22 |
RabbitMQ rindas parametri un to nozīme


/**
* Izveidojiet jaunu rindu, piešķirot nosaukumu, izturības karodziņu un automātiskās dzēšanas karodziņu, kā arī argumentus.
* @param nosaukt rindas nosaukumu - nedrīkst būt nulle; iestatiet uz "", lai brokeris ģenerētu vārdu.
* @param izturīga taisnība, ja mēs deklarējam pastāvīgu rindu (rinda izdzīvos pēc servera restartēšanas)
* @param ekskluzīva taisnība, ja mēs deklarējam ekskluzīvu rindu (rindu izmantos tikai deklarētāja
* savienojums)
* @param automātiski dzēst patiesu, ja serverim ir jāizdzēš rinda, kad tā vairs netiek izmantota
* @param argumenti Argumenti, kas izmantoti, lai deklarētu rindu
*/
public Queue(Virknes nosaukums, Būla izturīgs, Būla ekskluzīvs, Būla automātiskā Dzēšana, Karte<Virkne, Objekts> argumenti) {
   Assert.notNull(nosaukums, "'nosaukums' nevar būt null");
   this.name = nosaukums;
   this.actualName = StringUtils.hasText(nosaukums) ? vārds
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   tas.izturīgs = izturīgs;
   this.exclusive = ekskluzīvs;
   this.autoDelete = automātiskā dzēšana;
   this.arguments = argumenti != null ? argumenti : jauns HashMap<>();
}

Parametru ievads:
1. nosaukums: rindas nosaukums;
2. actualName: Rindas īstais nosaukums, nosaukuma parametrs tiek izmantots pēc noklusējuma, ja nosaukums ir tukšs, viens tiek ģenerēts saskaņā ar noteikumiem;
3) izturīgs: vai tas ir noturīgs;
4. Ekskluzīvs: vai tas ir ekskluzīvs vai ekskluzīvs;
5. autoDelete: vai dzēst automātiski;
6. Argumenti: Citiem rindas atribūtu parametriem ir šādas opcijas, skatiet Argumenti 2. attēlā:
(1) x-message-ttl: ziņojuma derīguma termiņš milisekundēs;
(2) x-expires: rindas derīguma termiņš, cik ilgi rinda tiks izdzēsta, ja tai netiks piekļūts, vienība: milisekundes;
(3) x-max-length: maksimālais rindas garums, ja tas pārsniedz maksimālo vērtību, ziņojums tiks izdzēsts no rindas galvenes;
(4) x-max-length-bytes: rindas ziņojuma saturs aizņem maksimālo vietu, ko ierobežo atmiņas lielums, un, ja tas pārsniedz šo slieksni, ziņojums tiks izdzēsts no rindas galvenes;
(5) x-overflow: iestatiet rindas pārpildes uzvedību. Tas nosaka, kas notiek ar ziņojumu, kad ir sasniegts maksimālais rindas garums. Derīgās vērtības ir drop-head, reject-publish vai reject-publish-dlx. Kvoruma rindu veidi atbalsta tikai nolaižamo galvu;
(6) x-dead-letter-exchange: mirušo vēstuļu apmaiņas nosaukumu un ziņojumus, kuru derīguma termiņš ir beidzies vai ir izdzēsts (garās rindas garuma vai vietas dēļ, kas pārsniedz slieksni), var norādīt nosūtīšanai biržai;
(7) x-dead-letter-routing-key: mirušā burta ziņojuma maršrutēšanas atslēga, kas tiks izmantota, nosūtot ziņojumu uz mirušo burtu apmaiņas atslēgu, ja tā nav iestatīta, tiks izmantota ziņojuma sākotnējā maršrutēšanas atslēgas vērtība
(8) x-single-active-consumer: norāda, vai rinda ir viens aktīvs patērētājs, ja true, tikai viens patērētājs reģistrētajā patērētāju grupā patērē ziņojumus, pārējie tiek ignorēti un false, kad ziņojums tiek izplatīts visiem patērētājiem cilpā (noklusējuma false)
(9) x-max prioritāte: maksimālais prioritāšu skaits, kas jāatbalsta rindā; Ja tas nav iestatīts, rinda neatbalstīs ziņojumu prioritāti;
(10) x-queue-mode(Lazy mode): iestatiet rindu aizkavēšanās režīmā, saglabājiet pēc iespējas vairāk ziņojumu diskā, lai samazinātu RAM patēriņu; Ja tas nav iestatīts, rinda saglabās atmiņas kešatmiņu, lai pēc iespējas ātrāk piegādātu ziņojumus;
(11) x-queue-master-locator: iestatiet spoguļrindas galvenā mezgla informāciju klastera režīmā.


Atruna:
Visa programmatūra, programmēšanas materiāli vai raksti, ko publicē Code Farmer Network, ir paredzēti tikai mācību un pētniecības mērķiem; Iepriekš minēto saturu nedrīkst izmantot komerciāliem vai nelikumīgiem mērķiem, pretējā gadījumā lietotājiem ir jāuzņemas visas sekas. Informācija šajā vietnē nāk no interneta, un autortiesību strīdiem nav nekāda sakara ar šo vietni. Iepriekš minētais saturs ir pilnībā jāizdzēš no datora 24 stundu laikā pēc lejupielādes. Ja jums patīk programma, lūdzu, atbalstiet oriģinālu programmatūru, iegādājieties reģistrāciju un iegūstiet labākus oriģinālus pakalpojumus. Ja ir kādi pārkāpumi, lūdzu, sazinieties ar mums pa e-pastu.

Mail To:help@itsvse.com