|
|
Postitatud 09.04.2018 10:23:21
|
|
|
|

Vaikimisi ei püsita rabbitMQ järjekorra sõnumeid kõvakettale, mis tähendab, et kui rabbitMQ teenus taaskäivitatakse, kaovad sõnumid.
Järjekordade püsivus
Näiteks tuvastatakse järjekorra püsivusdurableis on seatud tõele, mis tähendab, et tegemist on püsiva järjekorraga, siis pärast teenuse taaskäivitamist eksisteerib see samuti, sest teenus salvestab püsiva järjekorra kõvakettale ning teenuse taaskäivitamisel taastab see varasema järjekorra. Järjekorda saab säilitada, kuid see, kas sees olevad sõnumid on püsivad, sõltub sõnumi püsivuse seadistustest. Teisisõnu, kui enne taaskäivitust järjekorda sõnumit ei saadeta, sõltub algse sõnumi olemasolu järjekorras ka pärast taaskäivitust sõnumi saatmise hetkel. Kui soovid, et sõnumid jääksid püsivaks pärast taaskäivitust, pead määrama identiteedi, et sõnum püsib.
Seadista järjekorra püsivus:
Meetodi neljas parameeter, autoDelete, sisestatakse tavaliselt vale. Dokumentatsioon kirjeldab seda parameetrit, kui see on tõsi, mis tähendab, et kui järjekorda enam ei kasutata (ei ole tellitud), kustutab server selle. Minu testimise käigus, kui kõik ühenduse muutmise järjekorra saajad on lahti ühendatud, kustutatakse järjekord, isegi kui seal on veel töötlemata sõnumeid. RabbitMQ taaskäivitused eemaldavad need samuti. Kui sisestatakse vale, ei kustuta teenus järjekorda ja järjekorras olevad sõnumid jäävad alles, kui kõik sellega ühendatud kliendid on lahti ühendatud. Saatja saab panna sõnumeid muudatusjärjekorda ka siis, kui kliendi ühendus puudub, ja kui klient avaneb, saab ta need sõnumid. Kui aga RabbitMQ teenus taaskäivitatakse, kaob järjekord ja sõnumid kaovad loomulikult.
Kolmas parameeter on eksklusiivne ning dokumentatsioonis on kirjas, et kui see on tõsi, siis katkeb järjekorra ühendus ning järjekord kustutatakse koos sees olevate sõnumitega.
Teine parameeter, vastupidav, on dokumentatsioonis kirjeldatud nii, et kui see on tõene, esindab see püsivat järjekorda, mis eksisteerib ka pärast teenuse taaskäivitumist. Sest teenus salvestab püsiva järjekorra kõvakettale ja kui teenus taaskäivitatakse, kinnitab see järjekorra uuesti. Muidugi peab see nii olema, kui nii automaatne kustutamine kui ka eksklusiivne on vale. Järjekorda saab säilitada, kuid see, kas sees olevad sõnumid on püsivad, sõltub sõnumi püsivuse seadistustest. Teisisõnu, kui enne taaskäivitust saadetakse järjekorda veel sõnumeid, sõltub see, kas algne sõnum on järjekorras ka pärast taaskäivitust, saatja seadistustest sõnumi saatmisel.
Pärast koodi muutmist proovime seda käivitada ja viga on järgmine:
Käsitlemata erand: RabbitMQ.Client.Exceptions.OperationInterruptedException: AMQP operatsioon katkestati: AMQP lähedane põhjus, algatatud Peeri poolt, code=406, text="PRECONDITION_FAILED - ebavõrdne arg 'vastupidav' järjekorra 'hello' jaoks vhostis 'myserver': vastu võetud 'true', kuid praegune on 'false'", classId=50, methodId=10, cause=
Sest me oleme määratlenud püsiva järjekorra nimega hello. RabbitMQ ei luba olemasolevaid järjekordi ümber defineerida erinevate parameetrite seadistustega.
On kaks lahendust:
1: Kuuluta järjekord uuesti teise nimega, näiteks my_queue 2: Kustuta määratletud "tere" järjekord aadressiga http://localhost:15672 ja logi sisse kasutajanime ja parooliga. RabbitMQ vaikimisi parool ja kasutajanimi on külalised. Klõpsa "järjekord" veerul, et näha järjekorra nimekirja, klõpsa "tere" järjekorral, et laiendada järjekorra detaile. Tõmba leht lõpuni, seal on punkt "Kustuta", klõpsa sellel, vajuta nuppu "Kustuta järjekord" ja saad järjekorra kustutada. Kui kood käivitatakse, luuakse tervitusjärjekord, mis toetab püsivust.
Sõnumite püsivus
Kui soovid pärast taaskäivitust sõnumi püsivana hoida, pead seadistama sõnumi püsivaks. Seade on siis, kui saatja selle saadab, mis on suhteliselt lihtne, ja kood on järgmine:
DeliveryMode on vaikimisi 1, mittepüsiv, ja seade 2 tähendab, et sõnum on püsiv
Pärast koodi muutmist proovime avada ainult tootjaprogrammi sõnumite saatmiseks, seejärel taaskäivitame rabbitMQ teenuse, avame tarbija uuesti ja leiame, et sõnum pole kadunud.
(Lõpp)
Lisatud on C# lähtekood:
Turistid, kui soovite näha selle postituse peidetud sisu, palun Vastuse
|
Eelmine:Erandsõnum: "StrongTypeException: IsPrima...Järgmine:Sissejuhatus C# delegaatidesse (delegaat, tegevus, funktsioon, predikaat)
|