Ta članek je zrcalni članek strojnega prevajanja, kliknite tukaj za skok na izvirni članek.

Pogled: 44647|Odgovoriti: 8

[WinForm] rabbitMQ Queue Queue Message Persistence [z izvorno kodo]

[Kopiraj povezavo]
Objavljeno na 9. 04. 2018 10:23:21 | | | |
Privzeto sporočila v čakalni vrsti rabbitMQ niso shranjena na trdem disku, kar pomeni, da se ob ponovnem zagonu storitve rabbitMQ sporočila izgubijo.

Obstojnost vrst

Na primer, prepoznamo obstojnost vrstedurableis nastavljen na true, kar pomeni, da gre za trajno čakalno vrsto, nato po ponovnem zagonu storitve tudi ta obstaja, saj storitev shrani trajno vrsto na trdi disk, in ko se storitev ponovno zažene, ponovno vzpostavi prej trajno čakalno vrsto. Čakalna vrsta se lahko ohrani, vendar je pomembno, ali so sporočila v njej trajna, odvisno od nastavitev obstojnosti sporočila. Z drugimi besedami, če pred ponovnim zagonom v čakalni vrsti ni poslanega nobenega sporočila, je odvisno od nastavitev sporočila, ki so se zgodile ob pošiljanju sporočila.
Če želite, da sporočila ostanejo vztrajna po ponovnem zagonu, morate nastaviti identiteto, da je sporočilo ohranjeno.

Nastavite obstojnost čakalne vrste:




Četrti parameter metode, autoDelete, se običajno vnese false. Dokumentacija opisuje ta parameter, če je resničen, kar pomeni, da če vrsta ni več uporabljena (ni naročena), jo strežnik izbriše. Med mojim testiranjem, dokler so vsi prejemniki vrste za spremembo povezave odklopljeni, se čakalna vrsta izbriše, tudi če so v njej še vedno neobdelana sporočila. Ponovni zagoni RabbitMQ jih bodo prav tako odstranili. Če je vnesena laž, storitev vrste ne bo izbrisala in sporočila v vrsti bodo obstajala, če so vsi odjemalci, povezani nanjo, odklopljeni. Pošiljatelj lahko sporočila vključi tudi v čakalno vrsto sprememb, ko ni povezave s stranko, in ko odjemalec pride, prejme ta sporočila. Če pa se storitev RabbitMQ ponovno zažene, čakalna vrsta izgine, sporočila v njej pa naravno izginejo.

Tretji parameter je izključujoč, dokumentacija pa navaja, da če je res, se povezava vrste prekine, nato pa se vrsta izbriše, vključno s sporočili v njej.

Drugi parameter, vzdržljiv, je v dokumentaciji opisan tako, da če je res, predstavlja trajno čakalno vrsto, ki bo obstajala tudi po ponovnem zagonu storitve. Ker storitev shrani trajno vrsto na trdi disk in ob ponovnem zagonu storitve to vrsto ponovno potrdi. Seveda mora biti, ko sta tako autoDelete kot exclusive napačna. Čakalna vrsta se lahko ohrani, vendar je pomembno, ali so sporočila v njej trajna, odvisno od nastavitev obstojnosti sporočila. Z drugimi besedami, če so sporočila še vedno poslana v čakalni vrsti pred ponovnim zagonom, ali izvirno sporočilo še vedno obstaja v vrsti po ponovnem zagonu, je odvisno od nastavitv pošiljatelja za sporočilo ob pošiljanju sporočila.


Ko kodo spremenimo, jo poskusimo zagnati, napaka pa bo naslednja:

Neobdelana izjema: RabbitMQ.Client.Exceptions.OperationInterruptedException: Operacija AMQP je bila prekinjena: AMQP close-reason, iniciirana s strani Peer, code=406, text="PRECONDITION_FAILED - inequivalent arg 'durable' for queue 'hello' v vhost 'myserver': prejeto 'true', a current is 'false'", classId=50, methodId=10, cause=



Ker smo določili netrajno čakalno vrsto z imenom hello. RabbitMQ ne omogoča ponovnega definiranja obstoječih vrst z različnimi nastavitvami parametrov.

Obstajata dve rešitvi:

1: Ponovno razglasite vrsto z drugačnim imenom, na primer my_queue
2: Izbrišite določeno "hello" vrsto z naslovom http://localhost:15672 in se prijavite z uporabniškim imenom in geslom. Privzeto geslo in uporabniško ime za RabbitMQ sta gostujoča. Kliknite na stolpec "queue" za ogled seznama vrst, kliknite na čakalno vrsto "hello" za razširitev podrobnosti vrste. Povleci stran na konec, tam je element "Izbriši", klikni nanj, klikni gumb "Izbriši vrstno vrsto" in lahko izbrišeš vrsto. Ko se koda zažene, se ustvari čakalna vrsta, ki podpira obstojnost.



Obstojnost sporočil

Če želite, da sporočilo ostane trajno po ponovnem zagonu, morate nastaviti, da sporočilo ostane trajno. Nastavitev je, ko pošiljatelj pošlje sporočilo, kar je razmeroma preprosto, koda pa je naslednja:


DeliveryMode privzeto nastavi 1, netrajno, nastavitev na 2 pa pomeni, da je sporočilo trajno

Ko spremenimo kodo, poskušamo odpreti program Producer samo za pošiljanje sporočil, nato ponovno zagnati storitev rabbitMQ, ponovno odpreti potrošnika in ugotoviti, da sporočilo ni izgubljeno.

(Konec)

Priložena je izvorna koda C#:

Turisti, če želite videti skrito vsebino te objave, prosimOdgovoriti





Prejšnji:Izjema sporočila: "StrongTypingException: IsPrima...
Naslednji:Uvod v C# delegate (delegate, Action, Func, predikat)
Objavljeno na 9. 04. 2018 13:17:51 |
Uči se učiti
Objavljeno na 25. 06. 2019 23:22:47 |
Uči se učiti
Objavljeno na 29. 06. 2019 09:36:23 |
Zakaj nisem videl demo posnetka, moram odgovoriti, da ga vidim
Objavljeno na 9. 07. 2019 17:34:42 |
Želim izvorno kodo v C#
Objavljeno na 24. 07. 2019 14:21:51 |
Dobro je, točno to potrebujem
Objavljeno na 11. 04. 2020 14:34:54 |
Nauči se
Objavljeno na 1. 01. 2022 14:45:24 |
1111111111111111
 Najemodajalec| Objavljeno na 3. 05. 2023 22:12:22 |
Parametri vrste RabbitMQ in njihovi pomeni


/**
* Sestavi novo vrsto, dodeli ime, zastavico vzdržljivosti, zastavico za samodejno brisanje in argumente.
* @param ime vrste - ne sme biti ničelno; nastavite na "", da posrednik ustvari ime.
* @param trajno resnično, če deklariramo trajno vrsto (vrsta bo preživela ponovni zagon strežnika)
* @param ekskluzivno resnično, če deklariramo ekskluzivno vrsto (čakalna vrsta bo uporabljena le s strani deklaranta
* povezava)
* @param samodejno brisanje res, če strežnik izbriše vrsto, ko ni več v uporabi
* @param argumenti argumenti, uporabljeni za deklaracijo vrste
*/
public Queue(String name, boolean durable, boolean exclive, boolean autoDelete, Map<String, Object> argumenti) {
   Assert.notNull(ime, "'ime' ne more biti null");
   this.name = ime;
   this.actualName = StringUtils.hasText(name) ? ime
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   this.durable = durable;
   this.exclusive = ekskluzivno;
   this.autoDelete = autoDelete;
   this.arguments = argumenti != null ? argumenti : novi HashMap<>();
}

Uvod v parametre:
1. ime: ime vrste;
2. actualName: Pravo ime vrste, parameter imena, se privzeto uporablja, če je ime prazno, se generira po pravilih;
3. vzdržljiv: ali je obstojen;
4. Ekskluzivno: ali je ekskluzivno ali ekskluzivno;
5. samodejno brisanje: ali samodejno brisanje;
6. Argumenti: Drugi parametri atributov vrste imajo naslednje možnosti, glej Argumente na sliki 2:
(1) x-sporočilo-ttl: čas poteka sporočila v milisekundah;
(2) x-potek: čas poteka vrste, koliko časa bo čakalna vrsta izbrisana, če do nje ne dostopamo, enota: milisekunde;
(3) x-max-dolžina: največja dolžina vrste; če preseže največjo vrednost, se sporočilo izbriše iz glave vrste;
(4) x-max-dolžine-bajtov: vsebina sporočila v vrsti zavzema največji prostor, omejen z velikostjo pomnilnika, in če preseže ta prag, bo sporočilo izbrisano iz glave vrste;
(5) x-overflow: Nastavite vedenje preliva vrste. To določa, kaj se zgodi s sporočilom, ko je dosežena največja dolžina vrste. Veljavne vrednosti so drop-head, zavrni-objavi ali zavrni-objavi-dlx. Vrste vrste čakalnih vrst quoruma podpirajo le drophead;
(6) x-dead-letter-exchange: ime borze z mrtvimi pismi in sporočila, ki so potekla ali so bila izbrisana (zaradi dolge čakalne vrste ali prostora, ki presega prag), se lahko določijo za pošiljanje v izmenjavo;
(7) x-dead-letter-routing-key: Usmerjevalni ključ mrtvega sporočila, ki se uporabi ob pošiljanju sporočila dead-letter exchange, če ni nastavljen, se uporabi izvirna vrednost usmerjevalnega ključa sporočila
(8) x-enojni-aktivni-uporabnik: označuje, ali je vrsta en aktivni porabnik; če je res, sporočila porabi le en potrošnik v registrirani skupini potrošnikov, ostali so prezrti in laž, ko je sporočilo razdeljeno vsem potrošnikom v zanki (privzeto neresnično)
(9) x-max-prioriteta: največje število prioritet, ki jih mora podpirati vrsta; Če ni nastavljena, vrsta ne podpira prioritete sporočil;
(10) x-queue-mode (Lazy mode): Nastavite vrsto na način zakasnitve, na disku hranite čim več sporočil za zmanjšanje porabe RAM-a; Če ni nastavljena, bo vrsta hranila pomnilniški predpomnilnik za čim hitrejšo dostavo sporočil;
(11) x-queue-master-locator: Nastavite informacije o glavnem vozlišču zrcalne vrste v gruči način.


Disclaimer:
Vsa programska oprema, programski materiali ali članki, ki jih izdaja Code Farmer Network, so namenjeni zgolj učnim in raziskovalnim namenom; Zgornja vsebina ne sme biti uporabljena v komercialne ali nezakonite namene, sicer uporabniki nosijo vse posledice. Informacije na tej strani prihajajo z interneta, spori glede avtorskih pravic pa nimajo nobene zveze s to stranjo. Zgornjo vsebino morate popolnoma izbrisati z računalnika v 24 urah po prenosu. Če vam je program všeč, podprite pristno programsko opremo, kupite registracijo in pridobite boljše pristne storitve. Če pride do kakršne koli kršitve, nas prosimo kontaktirajte po elektronski pošti.

Mail To:help@itsvse.com