Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 44647|Vastaus: 8

[WinForm] rabbitMQ Queue Queue Message Persistence [lähdekoodin kanssa]

[Kopioi linkki]
Julkaistu 9.4.2018 10.23.21 | | | |
Oletuksena rabbitMQ-jonoviestit eivät pysy kiintolevyllä, mikä tarkoittaa, että kun rabbitMQ-palvelu käynnistetään uudelleen, viestit katoavat.

Jonojen pysyvyys

Esimerkiksi jonon pysyvyys tunnistetaandurable-on asetettu true-arvoon, mikä tarkoittaa, että kyseessä on pysyvä jono, ja palvelun uudelleenkäynnistyksen jälkeen se on myös olemassa, koska palvelu tallentaa pysyvän jonon kiintolevylle, ja kun palvelu käynnistetään uudelleen, se palauttaa aiemmin säilytetyn jonon. Jonoa voidaan säilyttää, mutta viestien pysyvyys riippuu viestin pysyvyysasetuksista. Toisin sanoen, jos jonossa ei lähetetä viestiä ennen uudelleenkäynnistystä, alkuperäinen viesti säilyy jonossa uudelleenkäynnistyksen jälkeen, riippuu viestin asetuksista, jotka ilmestyivät viestin lähettämisen yhteydessä.
Jos haluat pitää viestit pysyvinä jälleenkäynnistyksen jälkeen, sinun täytyy määrittää viestin pysyvä identiteetti.

Aseta jonon pysyvyys:




Menetelmän neljäs parametri, autoDelete, syötetään yleensä väärin. Dokumentaatio kuvaa tätä parametria, jos se on totta, mikä tarkoittaa, että jos jonoa ei enää käytetä (ei tilata), palvelin poistaa sen. Testaukseni aikana, kunhan kaikki yhteyden vaihtojonon vastaanottajat ovat irrotettuja, jono poistetaan, vaikka siinä olisi vielä käsittelemättömiä viestejä. RabbitMQ:n uudelleenkäynnistys poistaa ne myös. Jos väärä syötetään, palvelu ei poista jonoa ja viestit jonossa ovat olemassa, jos kaikki siihen liitetyt asiakkaat on katkaistu. Lähettäjä voi myös laittaa viestejä muutosjonoon, kun asiakasyhteyttä ei ole, ja kun asiakas avautuu, se saa nämä viestit. Kuitenkin, jos RabbitMQ-palvelu käynnistetään uudelleen, jono katoaa ja viestit katoavat luonnollisesti.

Kolmas parametri on yksinoikeudellinen, ja dokumentaatiossa todetaan, että jos se on totta, jonon yhteys katkeaa, ja jono poistetaan, mukaan lukien sisällä olevat viestit.

Toinen parametri, kestävä, kuvataan dokumentaatiossa siten, että jos se on totta, se edustaa pysyvää jonoa, joka on olemassa myös palvelun uudelleenkäynnistyksen jälkeen. Koska palvelu tallentaa pysyvän jonon kiintolevylle, ja kun palvelu käynnistetään uudelleen, se vahvistaa jonon uudelleen. Tietenkin sen täytyy olla, kun sekä automaattinen Delete että yksinoikeus ovat vääriä. Jonoa voidaan säilyttää, mutta viestien pysyvyys riippuu viestin pysyvyysasetuksista. Toisin sanoen, jos jonossa on vielä viestejä ennen uudelleenkäynnistystä, onko alkuperäinen viesti jonossa uudelleenkäynnistyksen jälkeen, riippuu lähettäjän asetuksista viestin lähettämisen yhteydessä.


Kun olemme muokanneet koodia, yritämme ajaa sen, ja virhe on seuraava:

Käsittelemätön poikkeus: RabbitMQ.Client.Exceptions.OperationInterruptedException: AMQP-operaatio keskeytettiin: AMQP close-reason, käynnistetty Peerin toimesta, code=406, text="PRECONDITION_FAILED - epäekvivalentti arg 'kestävä' jonolle 'hello' vhostissa 'myserver': vastaanotettu 'true', mutta nykyinen on 'false'", classId=50, methodId=10, cause=



Koska olemme määritelleet pysyvän jonon nimeltä hello. RabbitMQ ei salli olemassa olevien jonojen uudelleenmäärittelyä eri parametriasetuksilla.

Ratkaisuja on kaksi:

1: Ilmoita jono eri nimellä, kuten my_queue
2: Poista määritelty "hei"-jono osoitteella http://localhost:15672 ja kirjaudu sisään käyttäjätunnuksella ja salasanalla. RabbitMQ:n oletussalasana ja käyttäjätunnus ovat vieras. Klikkaa "jono"-saraketta nähdäksesi jonoluettelon, klikkaa "hello"-jonoa laajentaaksesi jonon yksityiskohtia. Vedä sivu loppuun, siellä on kohta "Poista", klikkaa sitä, klikkaa "Poista jono" -painiketta ja voit poistaa jonon. Kun koodi ajetaan, luodaan hello-jono, joka tukee pysyvyyttä.



Viestien pysyvyys

Jos haluat pitää viestin pysyvänä uudelleenkäynnistyksen jälkeen, sinun täytyy asettaa viesti pysyväksi. Asetus on silloin, kun lähettäjä lähettää sen, mikä on suhteellisen yksinkertaista, ja koodi on seuraava:


DeliveryMode asettaa oletuksena 1, ei-pysyvä, ja asetus 2 tarkoittaa, että viesti pysyy

Kun olemme muokanneet koodia, yritämme avata vain tuottajaohjelman viestien lähettämiseen, käynnistää rabbitMQ-palvelun uudelleen, avata kuluttaja uudelleen ja huomaamme, ettei viesti ole kadonnut.

(Loppu)

Liitteenä on C#-lähdekoodi:

Turistit, jos haluatte nähdä tämän postauksen piilotetun sisällön, olkaa hyväVastaus





Edellinen:Poikkeusviesti: "StrongTypingException: IsPrima...
Seuraava:Johdanto C#-delegaatteihin (delegaatti, toiminta, funktio, predikaatti)
Julkaistu 9.4.2018 13.17.51 |
Opettele oppimaan
Julkaistu 25.6.2019 23.22.47 |
Opettele oppimaan
Julkaistu 29.6.2019 9.36.23 |
Miksi en nähnyt demoa, minun täytyy vastata nähdäkseni sen
Julkaistu 9.7.2019 17.34.42 |
Haluan C#-lähdekoodin
Julkaistu 24.7.2019 14.21.51 |
Se on hyvä, juuri sitä mitä tarvitsen
Julkaistu 11.4.2020 14.34.54 |
Opettele se
Julkaistu 1.1.2022 14.45.24 |
1111111111111111
 Vuokraisäntä| Julkaistu 3.5.2023 22.12.22 |
RabbitMQ:n jonon parametrit ja niiden merkitykset


/**
* Rakenna uusi jono, johon annetaan nimi, kestävyyslippu, automaattisen poiston lippu ja argumentit.
* @param nimeä jonon nimi – ei saa olla nolla; aseta "", jotta välittäjä generoi nimen.
* @param kestävä totta, jos julistamme kestävän jonon (jono kestää palvelimen uudelleenkäynnistyksen)
* @param eksklusiivinen totta, jos julistamme yksinoikeudellisen jonon (jonoa käyttävät vain ilmoittajat
* yhteys)
* @param automaattinen poisto, jos palvelin poistaa jonon, kun sitä ei enää käytetä
* @param argumentteja, joita käytetään jonon määrittämiseen
*/
public Queue(String name, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments) {
   Assert.notNull(name, "'name' ei voi olla null");
   this.name = nimi;
   this.actualName = StringUtils.hasText(name) ? Nimi
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   this.durable = kestävä;
   this.exclusive = eksklusiivinen;
   this.autoDelete = autoDelete;
   this.arguments = arguments != null ? argumentit : new HashMap<>();
}

Parametrien esittely:
1. nimi: jonon nimi;
2. actualName: Jonon oikea nimi, nimiparametri käytetään oletuksena, jos nimi on tyhjä, se generoidaan sääntöjen mukaisesti;
3. kestävä: onko se pysyvää;
4. Eksklusiivinen: onko se eksklusiivinen vai eksklusiivinen;
5. autoDelete: poistataanko automaattisesti;
6. Argumentit: Jonon muut attribuuttiparametrit sisältävät seuraavat vaihtoehdot, katso Argumentit kuvassa 2:
(1) x-message-ttl: viestin viimeinen käyttöaika, millisekunteina;
(2) x-vanhenee: jonon vanhenemisaika, kuinka kauan jono poistetaan, jos sitä ei käytetä, yksikkö: millisekunteja;
(3) x-max-length: jonon maksimipituus, jos se ylittää maksimiarvon, viesti poistetaan jonon otsikosta;
(4) x-max-length-bytes: jonoviestin sisältö vie maksimitilan, joka on rajoitettu muistin koon mukaan, ja jos se ylittää tämän kynnyksen, viesti poistetaan jonon otsikosta;
(5) x-overflow: Aseta jonon ylivuotokäyttäytyminen. Tämä määrittää, mitä viestille tapahtuu, kun jonon maksimipituus saavutetaan. Kelvolliset arvot ovat drop-head, reject-publish tai reject-publish-dlx. Quorum queue -tyypit tukevat vain dropheadia;
(6) x-dead-letter-exchange: kuolleen kirjeen vaihdon nimi sekä vanhentuneet tai poistetut viestit (pitkän jonon pituuden tai kynnysarvon ylittävän tilan vuoksi) voidaan määrittää lähetettäväksi pörssille;
(7) x-dead-letter-routing-key: Dead-letter-viestin reititysavain, jota käytetään, kun viesti lähetetään kuolleen kirjaimen vaihtajalle, ja jos sitä ei ole asetettu, käytetään viestin alkuperäistä reititysavainarvoa
(8) x-yksi-aktiivinen kuluttaja: osoittaa, onko jono yksittäinen aktiivinen kuluttaja, jos totta, vain yksi rekisteröity kuluttaja kuluttaa viestejä, muut jätetään huomiotta, ja epätosi, kun viesti jaetaan kaikille kuluttajille silmukassa (oletus epätosi)
(9) x-max-priority: jonon tuettava enimmäismäärä prioriteetteja; Jos jono ei ole asetettu, se ei tue viestin prioriteettia;
(10) x-queue-mode (laiska tila): Aseta jono viivetilaan, pidä mahdollisimman monta viestiä levyllä RAM-kulutuksen vähentämiseksi; Jos jono ei ole asetettu, se säilyttää muistivälimuistin, jotta viestit voidaan toimittaa mahdollisimman nopeasti;
(11) x-queue-master-locator: Aseta peilijonon pääsolmutiedot klusterimoodiin.


Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com