Tento článok je zrkadlovým článkom o strojovom preklade, kliknite sem pre prechod na pôvodný článok.

Pohľad: 44647|Odpoveď: 8

[WinForm] rabbitMQ Queue Queue Persistence Message [so zdrojovým kódom]

[Kopírovať odkaz]
Zverejnené 9. 4. 2018 10:23:21 | | | |
Predvolene sa správy rabbitMQ fronty neuchovávajú na pevnom disku, čo znamená, že po reštarte služby rabbitMQ sa správy stratia.

Pretrvávanie frontov

Napríklad je identifikovaná perzistencia frontydurableis nastavený na true, čo znamená, že ide o perzistentnú frontu, potom po reštarte služby tiež existuje, pretože služba uloží pretrvávajúcu frontu na pevný disk a po reštarte služby obnoví to, čo bolo predtým ponechané. Fronta môže byť zachovaná, ale či sú správy vo vnútri perzistentné, závisí od nastavení perzistencie správy. Inými slovami, ak pred reštartom v rade nebola odoslaná žiadna správa, či pôvodná správa po reštarte stále existuje vo fronte, závisí od nastavení správy, ktoré nastali pri odoslaní správy.
Ak chcete, aby správy zostali pretrvávajúce aj po reštarte, musíte nastaviť identitu, že správa je zachovaná.

Nastavte perzistenciu fronty:




Štvrtý parameter metódy, autoDelete, sa zvyčajne zadáva false. Dokumentácia popisuje tento parameter, ak je pravdivý, čo znamená, že ak sa fronta už nepoužíva (nie je prihlásená na odber), server ju vymaže. Počas môjho testovania, pokiaľ sú všetci príjemcovia fronty na zmenu pripojenia odpojení, fronta sa maže, aj keď v nej stále sú nespracované správy. Reštarty RabbitMQ ich tiež odstránia. Ak sa zadá falošné, služba frontu nevymaže a správy v rade budú existovať, ak sú všetci klienti pripojení k nej odpojení. Odosielateľ môže tiež vložiť správy do zmeny fronty, keď neexistuje klientské pripojenie, a keď sa klient zobrazí, dostane tieto správy. Ak sa však služba RabbitMQ reštartuje, fronta zmizne a správy v nej prirodzene zmiznú.

Tretí parameter je exkluzívny a dokumentácia uvádza, že ak je pravda, spojenie fronty je prerušené a fronta sa vymaže vrátane správ vo vnútri.

Druhý parameter, trvanlivý, je v dokumentácii opísaný tak, že ak je pravda, predstavuje trvalú frontu, ktorá bude existovať aj po reštarte služby. Pretože služba uloží trvalú frontu na pevný disk a po reštarte služby túto frontu potvrdí. Samozrejme, musí to tak byť, keď sú autoDelete aj exkluzívne nepravdivé. Fronta môže byť zachovaná, ale či sú správy vo vnútri perzistentné, závisí od nastavení perzistencie správy. Inými slovami, ak sú správy stále odoslané vo fronte pred reštartom, či pôvodná správa stále existuje vo fronte po reštarte, závisí od nastavení odosielateľa správy pri jej odoslaní.


Po úprave kódu sa ho pokúsime spustiť a chyba bude nasledovná:

Nespracovaná výnimka: RabbitMQ.Client.Exceptions.OperationInterruptedException: Operácia AMQP bola prerušená: AMQP uzavretý dôvod, iniciovaná Peerom, kód=406, text="PRECONDITION_FAILED - inequivalent arg 'durable' pre queue 'hello' vo vhost 'myserver': prijaté 'true', ale current is 'false'", classId=50, methodId=10, cause=



Pretože sme definovali nepretrvávanú frontu nazvanú hello. RabbitMQ neumožňuje redefinovanie existujúcich frontov s odlišnými nastaveniami parametrov.

Existujú dve riešenia:

1: Znovu deklarovať frontu s iným názvom, napríklad my_queue
2: Vymažte definovanú "hello" frontu s adresou http://localhost:15672 a prihláste sa s používateľským menom a heslom. Predvolené heslo a používateľské meno pre RabbitMQ sú hosť. Kliknite na stĺpec "queue" pre zobrazenie zoznamu frontov, kliknite na "hello" queue pre rozšírenie detailov fronty. Potiahni stránku na koniec, je tam položka "Vymazať", klikni na ňu, klikni na tlačidlo "Vymazať frontu" a môžeš frontu vymazať. Keď sa kód spustí, vytvorí sa hello fronta, ktorá podporuje perzistenciu.



Pretrvávanie správ

Ak chcete, aby správa zostala pretrvávajúca aj po reštarte, musíte ju nastaviť, aby pretrvala. Nastavenie je, keď odosielateľ posiela signál, čo je relatívne jednoduché, a kód je nasledovný:


DeliveryMode je predvolene nastavený na 1, netrvalý, a nastavenie na 2 znamená, že správa je trvalá

Po úprave kódu sa snažíme otvoriť len program Producer na odoslanie správ, potom reštartovať službu rabbitMQ, znova otvoriť spotrebiteľa a zistiť, že správa nie je stratená.

(Koniec)

Priložený je zdrojový kód C#:

Turisti, ak chcete vidieť skrytý obsah tohto príspevku, prosím.Odpoveď





Predchádzajúci:Správa výnimky: "StrongTypingException: IsPrima...
Budúci:Úvod do C# delegátov (delegovať, Akcia, Func, predikát)
Zverejnené 9. 4. 2018 13:17:51 |
Naučte sa učiť
Zverejnené 25. 6. 2019 23:22:47 |
Naučte sa učiť
Zverejnené 29. 6. 2019 9:36:23 |
Prečo som nevidel demo, musím odpovedať, aby som ho videl
Zverejnené 9. 7. 2019 17:34:42 |
Chcem zdrojový kód v C#
Zverejnené 24. 7. 2019 14:21:51 |
Je to dobré, presne to potrebujem
Zverejnené 11. 4. 2020 14:34:54 |
Nauč sa to
Zverejnené 1. 1. 2022 14:45:24 |
1111111111111111
 Prenajímateľ| Zverejnené 3. 5. 2023 22:12:22 |
Parametre fronty RabbitMQ a ich významy


/**
* Vytvorte novú frontu, dostanete názov, príznak odolnosti, príznak automatického mazania a argumenty.
* @param pomenovať názov fronty – nesmie byť null; nastavte na "", aby maklér vygeneroval meno.
* @param trvalá pravda, ak deklarujeme trvalú frontu (fronta prežije reštart servera)
* @param exkluzívna pravda, ak deklarujeme exkluzívnu frontu (rada bude použitá iba deklarantom
* spojenie)
* @param automatické vymazanie je pravda, ak server zmaže frontu, keď už nie je v prevádzke
* @param argumenty argumenty použité na deklaráciu fronty
*/
public Queue(String name, boolean durable, boolean exclive, boolean autoDelete, Map<String, Object> argumenty) {
   Assert.notNull(meno, "meno" nemôže byť null");
   this.name = názov;
   this.actualName = StringUtils.hasText(name) ? meno
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   this.durable = odolný;
   this.exclusive = exkluzívne;
   this.autoDelete = autoDelete;
   this.arguments = argumenty != null ? argumenty : nový HashMap<>();
}

Úvod parametrov:
1. Meno: názov fronty;
2. skutočnéMeno: Skutočný názov fronty, parameter mena, sa používa predvolene, ak je názov prázdny, generuje sa podľa pravidiel;
3. trvácnosť: či je perzistentná;
4. Exkluzívny: či je exkluzívny alebo exkluzívny;
5. Automatické vymazanie: či sa má vymazať automaticky;
6. Argumenty: Ostatné atribútové parametre fronty majú nasledujúce možnosti, pozri Argumenty na obrázku 2:
(1) x-message-ttl: čas vypršania správy v milisekundách;
(2) x-expiruje: čas vypršania fronty, ako dlho bude fronta vymazaná, ak k nej nepristupujete, jednotka: milisekundy;
(3) x-max-dĺžka: maximálna dĺžka fronty, ak prekročí maximálnu hodnotu, správa bude vymazaná z hlavičky fronty;
(4) x-max-dĺžky-bajtov: obsah správy fronty zaberá maximálny priestor, obmedzený veľkosťou pamäte, a ak prekročí tento prah, správa bude vymazaná z hlavičky fronty;
(5) x-overflow: Nastavte správanie pretečenia fronty. To určuje, čo sa stane so správou, keď sa dosiahne maximálna dĺžka fronty. Platné hodnoty sú drop-head, reject-publish alebo reject-publish-dlx. Typy quorum fronty podporujú iba drop-head;
(6) x-dead-letter-exchange: názov dead-letter exchange, a správy, ktoré expirovali alebo boli vymazané (kvôli dlhej dĺžke fronty alebo medzere presahujúcej prah), môžu byť špecifikované na odoslanie do ústredne;
(7) x-dead-letter-routing-key: Smerovací kľúč dead-letter správy, ktorý sa použije pri odoslaní správy do dead-letter exchanger, ak nie je nastavený, použije sa pôvodná hodnota smerovacieho kľúča správy
(8) x-single-active-consumer: označuje, či je fronta jediným aktívnym spotrebiteľom, ak je to pravda, správy konzumuje len jeden spotrebiteľ v registrovanej skupine spotrebiteľov, ostatní sú ignorovaní a nepravdivé, keď je správa distribuovaná všetkým spotrebiteľom v cykle (default false)
(9) x-max-priority: maximálny počet priorít, ktoré fronta podporuje; Ak nie je nastavená, fronta nebude podporovať prioritu správ;
(10) x-queue-mode (Lazy mode): Nastavte queue na delay mode, uchovávajte čo najviac správ na disku, aby ste znížili využitie RAM; Ak nie je nastavená, fronta si uchováva pamäťovú cache na čo najrýchlejšie doručenie správ;
(11) x-queue-master-locator: Nastavte informácie o hlavnom uzle zrkadlovej fronty do klastrového režimu.


Vyhlásenie:
Všetok softvér, programovacie materiály alebo články publikované spoločnosťou Code Farmer Network slúžia len na vzdelávacie a výskumné účely; Vyššie uvedený obsah nesmie byť použitý na komerčné alebo nezákonné účely, inak nesú všetky následky používateľmi. Informácie na tejto stránke pochádzajú z internetu a spory o autorské práva s touto stránkou nesúvisia. Musíte úplne vymazať vyššie uvedený obsah zo svojho počítača do 24 hodín od stiahnutia. Ak sa vám program páči, podporte originálny softvér, zakúpte si registráciu a získajte lepšie originálne služby. Ak dôjde k akémukoľvek porušeniu, kontaktujte nás prosím e-mailom.

Mail To:help@itsvse.com