Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 44647|Odpověď: 8

[WinForm] rabbitMQ Queue Queue Persistence zprávy [se zdrojovým kódem]

[Kopírovat odkaz]
Zveřejněno 09.04.2018 10:23:21 | | | |
Ve výchozím nastavení se zprávy rabbitMQ fronty neuchovat na pevném disku, což znamená, že po restartu služby rabbitMQ zprávy zmizí.

Perzistence front

Například je identifikována perzistence frontydurableis nastaven na true, což znamená, že jde o trvalou frontu, poté po restartu služby také existuje, protože služba uloží persisted queue na pevný disk a po restartu služby obnoví to, co bylo dříve persistent. Fronta může být ponechána, ale zda jsou zprávy uvnitř persistentní, závisí na nastavení perzistence zprávy. Jinými slovy, pokud před restartem ve frontě není odeslána žádná zpráva, zda původní zpráva po restartu stále existuje ve frontě, závisí na nastavení zprávy, která nastala při odeslání zprávy.
Pokud chcete, aby zprávy po restartu zůstaly trvalé, musíte nastavit identitu, že zpráva je uchovávána.

Nastavte perzistenci fronty:




Čtvrtý parametr metody, autoDelete, se obvykle zadává false. Dokumentace popisuje tento parametr, pokud je pravdivý, což znamená, že pokud fronta již není používána (není odebírána), server ji smaže. Během mého testování, pokud jsou všichni příjemci fronty na změnu připojení odpojeni, fronta se maže, i když v ní stále jsou nezpracované zprávy. Restarty RabbitMQ je také odstraní. Pokud je zadán false příkaz, služba frontu nesmaže a zprávy ve frontě budou existovat, pokud jsou všichni klienti připojeni k ní odpojeni. Odesílatel může také vložit zprávy do fronty změn, když klient nemá připojení, a když klient přijde, tyto zprávy obdrží. Pokud je však služba RabbitMQ restartována, fronta zmizí a zprávy v ní přirozeně zmizí.

Třetí parametr je exkluzivní a dokumentace uvádí, že pokud je pravda, spojení fronty je přerušeno a fronta je smazána včetně zpráv uvnitř.

Druhý parametr, trvalý, je v dokumentaci popsán tak, že pokud je pravdivý, představuje trvalou frontu, která bude existovat i po restartu služby. Protože služba uloží trvalou frontu na pevný disk a při jejím restartu tuto frontu znovu potvrdí. Samozřejmě, že to musí být, když jsou jak autoDelete, tak exclusive nepravdivé. Fronta může být ponechána, ale zda jsou zprávy uvnitř persistentní, závisí na nastavení perzistence zprávy. Jinými slovy, pokud jsou před restartem ve frontě stále odesílány zprávy, zda původní zpráva po restartu stále existuje ve frontě, závisí na nastavení odesílatele zprávy při odeslání zprávy.


Po úpravě kódu se ho pokusíme spustit a chyba bude následující:

Nezpracovaná výjimka: RabbitMQ.Client.Exceptions.OperationInterruptedException: Operace AMQP byla přerušena: AMQP uzavřený důvod, iniciováno Peerem, code=406, text="PRECONDITION_FAILED - inequivalent arg 'durable' pro frontu 'hello' ve vhost 'myserver': přijato 'true', ale current is 'false'", classId=50, methodId=10, cause=



Protože jsme definovali netrvalou frontu nazvanou hello. RabbitMQ neumožňuje redefinovat existující fronty s různými nastaveními parametrů.

Existují dvě řešení:

1: Znovu deklarovat frontu s jiným názvem, například my_queue
2: Smazat definovanou frontu "hello" s adresou http://localhost:15672 a přihlásit se uživatelským jménem a heslem. Výchozí heslo a uživatelské jméno pro RabbitMQ jsou host. Klikněte na sloupec "fronta" pro zobrazení seznamu front, klikněte na frontu "hello" pro rozšíření detailů fronty. Vytáhni stránku na konec, je tam položka "Smazat", klikni na ni, klikni na tlačítko "Smazat frontu" a můžeš frontu smazat. Když je kód spuštěn, vytvoří se hello fronta, která podporuje perzistenci.



Trvalost zpráv

Pokud chcete, aby zpráva přetrvala i po restartu, musíte nastavit, aby zpráva přetrvala. Nastavení je, když odesílatel odesílá zprávu, což je relativně jednoduché, a kód je následující:


DeliveryMode je výchozí na 1, neperzistentní, a nastavení na 2 znamená, že zpráva je trvalá

Po úpravě kódu se snažíme otevřít pouze program Producer pro odeslání zpráv, pak restartovat službu rabbitMQ, znovu otevřít spotřebitele a zjistit, že zpráva není ztracena.

(Konec)

Přiložen je zdrojový kód C#:

Turisté, pokud chcete vidět skrytý obsah tohoto příspěvku, prosímOdpověď





Předchozí:Zpráva o výjimečnosti: "StrongTypingException: IsPrima...
Další:Úvod do C# delegátů (delegovat, akce, func, predikat)
Zveřejněno 09.04.2018 13:17:51 |
Učte se učit
Zveřejněno 25.06.2019 23:22:47 |
Učte se učit
Zveřejněno 29.06.2019 9:36:23 |
Proč jsem neviděl demo, musím odpovědět, abych ho viděl
Zveřejněno 09.07.2019 17:34:42 |
Chci zdrojový kód v C#
Zveřejněno 24.07.2019 14:21:51 |
Je to dobré, přesně to potřebuji
Zveřejněno 11.04.2020 14:34:54 |
Nauč se to
Zveřejněno 01.01.2022 14:45:24 |
1111111111111111
 Pronajímatel| Zveřejněno 03.05.2023 22:12:22 |
Parametry fronty RabbitMQ a jejich významy


/**
* Sestavte novou frontu, dostanete jméno, příznak odolnosti, příznak automatického mazání a argumenty.
* @param pojmenovat název fronty – nesmí být null; nastavte na "" a necháte brokera generovat jméno.
* @param trvalá pravda, pokud deklarujeme trvalou frontu (fronta přežije restart serveru)
* @param exkluzivní pravda, pokud deklarujeme exkluzivní frontu (fronta bude použita pouze deklarátorem
* spojení)
* @param automatické mazání je pravda, pokud server frontu smaže, když již není používána
* @param argumenty argumenty použité k deklaraci fronty
*/
public Queue(String name, boolean durable, boolean exclive, boolean autoDelete, Map<String, Object> argumenty) {
   Assert.notNull(name, "'name' nemůže být null");
   this.name = jméno;
   this.actualName = StringUtils.hasText(name) ? Jméno
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   this.durable = durable;
   this.exclusive = exkluzivní;
   this.autoDelete = autoDelete;
   this.arguments = argumenty != null ? argumenty: nový HashMap<>();
}

Úvod parametrů:
1. název: název fronty;
2. skutečný názevNázev: Ve výchozím nastavení se používá skutečné jméno fronty, parametr jména, pokud je název prázdný, generuje se podle pravidel;
3. trvanlivost: zda je trvalá;
4. Exkluzivní: zda je exkluzivní nebo exkluzivní;
5. automatické mazání: zda smazat automaticky;
6. Argumenty: Další parametry atributů fronty mají následující možnosti, viz Argumenty na obrázku 2:
(1) x-message-ttl: doba expirace zprávy v milisekundách;
(2) x-expiruje: doba expirace fronty, jak dlouho bude fronta smazána, pokud k ní není přístup, jednotka: milisekundy;
(3) x-max-délka: maximální délka fronty, pokud překročí maximální hodnotu, zpráva bude smazána z hlavičky fronty;
(4) x-max-délky-bajtů: obsah zprávy ve frontě zabírá maximální prostor, omezený velikostí paměti, a pokud tuto hranici překročí, zpráva bude smazána z hlavičky fronty;
(5) x-přetečení: Nastavte chování přetečení fronty. To určuje, co se se zprávou stane, když je dosažena maximální délka fronty. Platné hodnoty jsou drop-head, odmítnout-publikovat nebo odmítnout-publikovat-dlx. Typy quorum fronty podporují pouze drop-head;
(6) x-dead-letter-exchange: název dead-letter exchange a zprávy, které vypršely nebo byly smazány (kvůli dlouhé frontě nebo mezerě přesahující hranici), mohou být určeny pro odeslání do ústředny;
(7) x-dead-letter-routing-key: Směrovací klíč dead-letter zprávy, který se použije při odeslání zprávy do dead-letter exchangeru; pokud není nastaven, použije se původní směrovací klíčová hodnota zprávy
(8) x-single-active-consumer: označuje, zda fronta je jediným aktivním spotřebitelem, pokud je true, pouze jeden spotřebitel ze skupiny registrovaných spotřebitelů spotřebovává zprávy, ostatní jsou ignorováni a false když je zpráva distribuována všem spotřebitelům v cyklu (výchozí nepravda)
(9) x-max-priorita: maximální počet priorit, které fronta podporuje; Pokud není nastavena, fronta nebude podporovat prioritu zpráv;
(10) x-queue-mode (Lazy mode): Nastavte frontu na delay mode, uchovejte na disku co nejvíce zpráv pro snížení využití RAM; Pokud není nastavena, fronta si uchovává paměťovou cache pro co nejrychlejší doručení zpráv;
(11) x-queue-master-locator: Nastavte informace o hlavním uzlu zrcadlové fronty do clusterového režimu.


Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com