|
|
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)
|