Denna artikel är en spegelartikel om maskinöversättning, klicka här för att hoppa till originalartikeln.

Utsikt: 44647|Svar: 8

[WinForm] rabbitMQ Queue Queue Message Persistence [med källkod]

[Kopiera länk]
Publicerad på 2018-04-09 10:23:21 | | | |
Som standard sparas inte rabbitMQ-kömeddelanden på hårddisken, vilket innebär att när rabbitMQ-tjänsten startas om går meddelandena förlorade.

Beständighet av köer

Till exempel identifieras köns beständighetdurableis satt till true, vilket betyder att det är en persistent kö, och efter att tjänsten startats om kommer den också att existera, eftersom tjänsten lagrar den bevarade kön på hårddisken, och när tjänsten startas om kommer den att återupprätta den tidigare bevarade kön. Kön kan vara kvar, men om meddelandena inuti är beständiga beror på meddelandets persistensinställningar. Med andra ord, om inget meddelande skickas i kön före omstarten, beror det på meddelandeinställningarna som inträffade när meddelandet skickades om det ursprungliga meddelandet fortfarande finns kvar i kön efter omstarten.
Om du vill behålla meddelanden persistent efter en omstart måste du ställa in identiteten där meddelandet ska vara bevarat.

Ställ in köpersistens:




Den fjärde parametern i metoden, autoDelete, anges vanligtvis som falsk. Dokumentationen beskriver denna parameter om den är sann, vilket innebär att om kön inte längre används (inte prenumererar), kommer servern att radera den. Under mina tester, så länge alla mottagare av anslutningsbyteskön är frånkopplade, raderas kön, även om det fortfarande finns obehandlade meddelanden i den. RabbitMQ-omstarter tar också bort dem. Om falskt anges kommer tjänsten inte att radera kön och meddelandena i kön kommer att finnas kvar om alla klienter som är anslutna till den är bortkopplade. Avsändaren kan också lägga in meddelanden i ändringskön när det inte finns någon klientanslutning, och när klienten kommer upp får den dessa meddelanden. Men om RabbitMQ-tjänsten startas om kommer kön att vara borta och meddelandena i den försvinner naturligt.

Den tredje parametern är exklusiv, och dokumentationen anger att om den är sann, så bryts anslutningen till kön, och kön raderas, inklusive meddelandena inuti.

Den andra parametern, durable, beskrivs i dokumentationen som att om den är sann, representerar den en persistent kö, som också kommer att finnas kvar efter att tjänsten startats om. Eftersom tjänsten lagrar den persistenta kön på hårddisken, och när tjänsten startas om, bekräftar den denna kö. Självklart måste det vara när både autoDelete och exklusiv är falska. Kön kan vara kvar, men om meddelandena inuti är beständiga beror på meddelandets persistensinställningar. Med andra ord, om det fortfarande finns meddelanden som skickas i kön före omstarten, beror det på avsändarens inställningar för meddelandet när meddelandet skickas om det ursprungliga meddelandet fortfarande finns kvar i kön efter omstarten.


Efter att vi ändrat koden försöker vi köra den, och felet blir följande:

Ohanterat undantag: RabbitMQ.Client.Exceptions.OperationInterruptedException: AMQP-operationen avbröts: AMQP stäng-reason, initierad av Peer, code=406, text="PRECONDITION_FAILED - Ekvivalent arg 'durable' för kö 'hello' i vhost 'myserver': received 'true' men current is 'false'", classId=50, methodId=10, cause=



För vi har definierat en icke-persisterad kö som heter hello. RabbitMQ tillåter inte omdefiniering av befintliga köer med olika parameterinställningar.

Det finns två lösningar:

1: Deklarera en kö på nytt med ett annat namn, såsom my_queue
2: Radera den definierade "hello"-kön med adressen http://localhost:15672 och logga in med användarnamn och lösenord. Standardlösenordet och användarnamnet för RabbitMQ är gäst. Klicka på kolumnen "kö" för att se kölistan, klicka på "hello"-kön för att utöka ködetaljerna. Dra sidan till slutet, det finns ett objekt "Ta bort", klicka på det, klicka på knappen "Ta bort kö" och du kan ta bort kön. När koden körs skapas en hello-kö som stödjer persistens.



Meddelandens beständighet

Om du vill behålla meddelandet bestående efter en omstart måste du ställa in meddelandet att bestå. Inställningen är när avsändaren skickar den, vilket är relativt enkelt, och koden är följande:


DeliveryMode är standard 1, icke-persistent, och inställning till 2 betyder att meddelandet är persistent

Efter att vi ändrat koden försöker vi bara öppna producerprogrammet för att skicka meddelanden, och sedan starta om rabbitMQ-tjänsten, öppna konsumenten igen och upptäcka att meddelandet inte är förlorat.

(Slut)

Bifogat är C#-källkoden:

Turister, om ni vill se det dolda innehållet i detta inlägg, snällaSvar





Föregående:Undantagsmeddelande: "StrongTypingException: IsPrima...
Nästa:Introduktion till C#-delegater (delegat, Handling, Func, predikat)
Publicerad på 2018-04-09 13:17:51 |
Lär dig att lära dig
Publicerad på 2019-06-25 23:22:47 |
Lär dig att lära dig
Publicerad på 2019-06-29 09:36:23 |
Varför såg jag inte demon, jag måste svara för att se den
Publicerad på 2019-07-09 17:34:42 |
Jag vill ha C#-källkod
Publicerad på 2019-07-24 14:21:51 |
Det är bra, det är precis vad jag behöver
Publicerad på 2020-04-11 14:34:54 |
Lär dig det
Publicerad på 2022-01-01 14:45:24 |
1111111111111111
 Hyresvärd| Publicerad på 2023-05-03 22:12:22 |
Parametrar för RabbitMQ:s kö och deras betydelser


/**
* Konstruera en ny kö, ge ett namn, hållbarhetsflagga, auto-delete-flagga och argument.
* @param namnge namnet på kön – får inte vara null; Sätt till "" för att mäklaren ska generera namnet.
* @param varaktig true om vi deklarerar en varaktig kö (kön kommer att överleva en serveromstart)
* @param exklusivt sant om vi deklarerar en exklusiv kö (kön kommer endast att användas av deklarantens
* anslutning)
* @param autoDelete true om servern ska radera kön när den inte längre används
* @param argument de argument som används för att deklarera kön
*/
public Queue(Strängnamn, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments) {
   Assert.notNull(name, "'name' cannot be null");
   this.name = namn;
   this.actualName = StringUtils.hasText(name) ? Namn
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   detta.hållbart = hållbart;
   this.exclusive = exklusiv;
   this.autoDelete = autoDelete;
   detta.argument = argument != null ? argument : ny HashMap<>();
}

Parameterintroduktion:
1. namn: köns namn;
2. actualName: Det riktiga namnet på kön, namnparametern används som standard, om namnet är tomt genereras ett enligt reglerna;
3. Hållbar: Om den är bestående;
4. Exklusiv: oavsett om det är exklusivt eller exklusivt;
5. autoDelete: om man ska radera automatiskt;
6. Argument: Andra attributparametrar i kön har följande alternativ, se Argument i Figur 2:
(1) x-meddelande-ttl: meddelandets utgångstid i millisekunder;
(2) x-förfall: köens utgångstid, hur länge kön raderas om den inte nås, enhet: millisekunder;
(3) x-max-längd: den maximala längden på kön, om den överstiger maxvärdet kommer meddelandet att raderas från köhuvudet;
(4) x-max-längd-byte: innehållet i kömeddelandet upptar maximalt utrymme, begränsat av minnesstorleken, och om det överskrider denna tröskel tas meddelandet bort från köhuvudet;
(5) x-överflöde: Ställ in kööverflödesbeteendet. Detta avgör vad som händer med meddelandet när den maximala längden av kön nås. Giltiga värden är drop-head, reject-publish eller reject-publish-dlx. Kvorumkötyper stöder endast drop-head;
(6) x-död-bokstavsutbyte: namnet på död-bokstavsutbytet och de meddelanden som har gått ut eller raderats (på grund av lång kölängd eller utrymmet som överskrider tröskeln) kan specificeras att skickas till utbytet;
(7) x-död-bokstav-routing-key: Routingnyckeln för dead-letter-meddelandet, som kommer att användas när meddelandet skickas till dead-letter-utbytaren, om den inte är inställd, kommer det ursprungliga ruttningsnyckelvärdet för meddelandet att användas
(8) x-enkel-aktiv-konsument: anger om kön är en aktiv konsument, om sann konsumerar endast en konsument i den registrerade konsumentgruppen meddelanden, de andra ignoreras, och falsk när meddelandet distribueras till alla konsumenter i en loop (standard falskt)
(9) x-max-prioritet: det maximala antalet prioriteringar som ska stödjas av kön; Om den inte är inställd kommer kön inte att stödja meddelandeprioritet;
(10) x-queue-mode (Lazy mode): Ställ in kön på delay-läge, behåll så många meddelanden som möjligt på disken för att minska RAM-användningen; Om den inte är inställd kommer kön att behålla en minnescache för att leverera meddelanden så snabbt som möjligt;
(11) x-queue-master-locator: Ställ in masternodinformationen för spegelkön i klusterläge.


Friskrivning:
All programvara, programmeringsmaterial eller artiklar som publiceras av Code Farmer Network är endast för lärande- och forskningsändamål; Ovanstående innehåll får inte användas för kommersiella eller olagliga ändamål, annars kommer användarna att bära alla konsekvenser. Informationen på denna sida kommer från internet, och upphovsrättstvister har inget med denna sida att göra. Du måste helt radera ovanstående innehåll från din dator inom 24 timmar efter nedladdning. Om du gillar programmet, vänligen stöd äkta programvara, köp registrering och få bättre äkta tjänster. Om det finns något intrång, vänligen kontakta oss via e-post.

Mail To:help@itsvse.com