Denne artikel er en spejling af maskinoversættelse, klik venligst her for at springe til den oprindelige artikel.

Udsigt: 44647|Svar: 8

[WinForm] rabbitMQ Kø Kø Beskedpersistens [med kildekode]

[Kopier link]
Opslået på 09/04/2018 10.23.21 | | | |
Som standard bliver rabbitMQ-kømeddelelser ikke lagret på harddisken, hvilket betyder, at når rabbitMQ-tjenesten genstartes, vil beskederne gå tabt.

Køers persistens

For eksempel identificeres køens persistensdurableis sat til true, hvilket betyder, at det er en persistent kø, og efter servicen genstartes, vil den også eksistere, fordi servicen vil gemme den vedvarende kø på harddisken, og når servicen genstartes, vil den genetablere den tidligere vedvarende kø. Køen kan bevares, men om beskederne indeni er persistente, afhænger af beskedens persistensindstillinger. Med andre ord, hvis der ikke sendes nogen besked i køen før genstarten, afhænger det af beskedindstillingerne, der blev sendt efter genstarten, om den oprindelige besked stadig eksisterer i køen efter genstarten.
Hvis du vil bevare beskederne efter en genstart, skal du sætte identiteten på, hvor beskeden er bevaret.

Opsæt kø-persistens:




Den fjerde parameter i metoden, autoDelete, angives normalt falsk. Dokumentationen beskriver denne parameter, hvis den er sand, hvilket betyder, at hvis køen ikke længere bruges (ikke abonneres), vil serveren slette den. Under min testning, så længe alle modtagere af forbindelsesændringskøen er afbrudt, bliver køen slettet, selvom der stadig er ubehandlede beskeder i den. RabbitMQ-genstarter vil også fjerne dem. Hvis falsk indtastes, vil tjenesten ikke slette køen, og beskederne i køen vil eksistere, hvis alle klienter, der er forbundet til den, bliver afbrudt. Afsenderen kan også lægge beskeder i ændringskøen, når der ikke er nogen klientforbindelse, og når klienten kommer op, vil den modtage disse beskeder. Men hvis RabbitMQ-tjenesten genstartes, vil køen være væk, og beskederne i den vil naturligt forsvinde.

Den tredje parameter er eksklusiv, og dokumentationen angiver, at hvis den er sand, så brydes forbindelsen til køen, og derefter slettes køen, inklusive beskederne indeni.

Den anden parameter, holdbar, beskrives i dokumentationen som, at hvis den er sand, repræsenterer den en vedvarende kø, som også vil eksistere efter tjenesten genstarter. Fordi tjenesten vil gemme den vedvarende kø på harddisken, og når tjenesten genstartes, vil den bekræfte denne kø. Selvfølgelig må det være sådan, når både autoDelete og eksklusiv er falske. Køen kan bevares, men om beskederne indeni er persistente, afhænger af beskedens persistensindstillinger. Med andre ord, hvis der stadig sendes beskeder i køen før genstarten, afhænger det afsenderens indstillinger for beskeden ved afsendelsen, om den oprindelige besked stadig eksisterer i køen efter genstarten.


Efter vi har ændret koden, prøver vi at køre den, og fejlen vil være som følger:

Ubehandlet undtagelse: RabbitMQ.Client.Exceptions.OperationInterruptedException: AMQP-operationen blev afbrudt: AMQP close-reason, initieret af Peer, kode=406, tekst="PRECONDITION_FAILED - inækvivalent arg 'durable' for kø 'hello' i vhost 'myserver': received 'true' men current is 'false'", classId=50, methodId=10, cause=



Fordi vi har defineret en ikke-persisteret kø kaldet hello. RabbitMQ tillader ikke at omdefinere eksisterende køer med forskellige parameterindstillinger.

Der er to løsninger:

1: Omdeklarer en kø med et andet navn, såsom my_queue
2: Slet den definerede "hello"-kø med adressen på http://localhost:15672 og log ind med brugernavn og adgangskode. Standardadgangskoden og brugernavnet til RabbitMQ er gæste. Klik på kolonnen "kø" for at se kølisten, klik på "hello"-køen for at udvide kødetaljerne. Træk siden til slutningen, der er et punkt "Slet", klik på det, klik på knappen "Slet kø", og du kan slette køen. Når koden køres, oprettes der en hello-kø, der understøtter persistens.



Beskeders persistens

Hvis du vil bevare beskeden efter en genstart, skal du sætte beskeden til at bestå. Indstillingen er, når afsenderen sender den, hvilket er relativt enkelt, og koden er som følger:


DeliveryMode er som standard 1, ikke-persistent, og at sætte til 2 betyder, at beskeden er persistent

Efter vi har ændret koden, prøver vi kun at åbne producer-programmet for at sende beskeder, og genstarter rabbitMQ-tjenesten, åbner consumeren igen og opdager, at beskeden ikke er tabt.

(Slut)

Vedhæftet er C#-kildekoden:

Turister, hvis I vil se det skjulte indhold i dette indlæg, så vær venligSvar





Tidligere:Undtagelsesbesked: "StrongTypingUndtagelse: IsPrima...
Næste:Introduktion til C#-delegerede (delegeret, Handling, Afslutning, prædikat)
Opslået på 09/04/2018 13.17.51 |
Lær at lære
Opslået på 25/06/2019 23.22.47 |
Lær at lære
Opslået på 29/06/2019 09.36.23 |
Hvorfor så jeg ikke demoen? Jeg må svare for at se den
Opslået på 09/07/2019 17.34.42 |
Jeg vil have C#-kildekode
Opslået på 24/07/2019 14.21.51 |
Det er godt, det er præcis det, jeg har brug for
Opslået på 11/04/2020 14.34.54 |
Lær det
Opslået på 01/01/2022 14.45.24 |
1111111111111111
 Udlejer| Opslået på 03/05/2023 22.12.22 |
Parametre for RabbitMQ-køen og deres betydninger


/**
* Byg en ny kø, giv et navn, holdbarhedsflag, auto-delete-flag og argumenter.
* @param navngive navnet på køen - må ikke være null; Sæt til "" for at få mægleren til at generere navnet.
* @param holdbar sand, hvis vi erklærer en holdbar kø (køen vil overleve en servergenstart)
* @param eksklusivt sandt, hvis vi erklærer en eksklusiv kø (køen vil kun blive brugt af deklarantens
* forbindelse)
* @param autoDelete true, hvis serveren skal slette køen, når den ikke længere er i brug
* @param argumenter de argumenter, der bruges til at erklære køen
*/
public Queue(Strengnavn, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments) {
   Assert.notNull(name, "'name' kan ikke være null");
   this.name = navn;
   this.actualName = StringUtils.hasText(name) ? Navn
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   this.durable = holdbar;
   this.exclusive = eksklusiv;
   this.autoDelete = autoDelete;
   dette.argumenter = argumenter != null ? argumenter : ny HashMap<>();
}

Parameterintroduktion:
1. navn: navnet på køen;
2. actualName: Køens rigtige navn, navneparameteren bruges som standard, hvis navnet er tomt, genereres der et navn i henhold til reglerne;
3. holdbar: om den er vedvarende;
4. Eksklusivt: uanset om det er eksklusivt eller eksklusivt;
5. autoDelete: om slettet skal automatisk;
6. Argumenter: Andre attributparametre i køen har følgende muligheder, se Argumenter i Figur 2:
(1) x-besked-ttl: beskedens udløbstid i millisekunder;
(2) x-udløb: køens udløbstid, hvor længe køen slettes, hvis den ikke tilgås, enhed: millisekunder;
(3) x-max-længde: den maksimale længde af køen, hvis den overstiger den maksimale værdi, slettes beskeden fra køens header;
(4) x-max-længde-bytes: indholdet af kømeddelelsen optager det maksimale plads, begrænset af hukommelsesstørrelsen, og hvis det overstiger denne tærskel, slettes beskeden fra køens header;
(5) x-overflow: Sæt kø-overflow-adfærden. Dette bestemmer, hvad der sker med beskeden, når den maksimale længde af køen nås. Gyldige værdier er drop-head, reject-publish eller reject-publish-dlx. Quorum-køtyper understøtter kun drop-head;
(6) x-død-brev-udveksling: navnet på den døde brevudveksling, og de beskeder, der er udløbet eller slettet (på grund af den lange kølængde eller pladsen, der overstiger tærsklen), kan specificeres til at blive sendt til udvekslingen;
(7) x-død-bogstav-routing-key: Routingnøglen for dead-letter beskeden, som vil blive brugt, når beskeden sendes til dead-letter exchangeren; hvis den ikke er sat, vil den oprindelige routingnøgle for beskeden blive brugt
(8) x-enkelt-aktiv-forbruger: angiver, om køen er en enkelt aktiv forbruger, hvis sand, forbruger kun én forbruger i den registrerede forbrugergruppe beskeder, de andre ignoreres, og falsk, når beskeden distribueres til alle forbrugere i en løkke (standard falsk)
(9) x-max-prioritet: det maksimale antal prioriteter, der skal understøttes af køen; Hvis den ikke er sat, understøtter køen ikke beskedprioritet;
(10) x-kø-tilstand (Lazy mode): Sæt køen til forsinkelsestilstand, behold så mange beskeder som muligt på disken for at reducere RAM-forbruget; Hvis den ikke er sat, vil køen gemme en hukommelsescache for at levere beskeder så hurtigt som muligt;
(11) x-kø-master-locator: Sæt masternodeinformationen for spejlkøen i klyngetilstand.


Ansvarsfraskrivelse:
Al software, programmeringsmaterialer eller artikler udgivet af Code Farmer Network er kun til lærings- og forskningsformål; Ovenstående indhold må ikke bruges til kommercielle eller ulovlige formål, ellers skal brugerne bære alle konsekvenser. Oplysningerne på dette site kommer fra internettet, og ophavsretstvister har intet med dette site at gøre. Du skal slette ovenstående indhold fuldstændigt fra din computer inden for 24 timer efter download. Hvis du kan lide programmet, så understøt venligst ægte software, køb registrering og få bedre ægte tjenester. Hvis der er nogen overtrædelse, bedes du kontakte os via e-mail.

Mail To:help@itsvse.com