|
|
Közzétéve 2018. 04. 09. 10:23:21
|
|
|
|

Alapértelmezés szerint a rabbitMQ sorban lévő üzenetek nem maradnak a merevlemezre, ami azt jelenti, hogy ha a rabbitMQ szolgáltatás újraindítódik, az üzenetek elvesznek.
A sorok tartóssága
Például a sor tartósságát azonosítjukdurable true-ra állítva, ami azt jelenti, hogy ez egy állandó sorban, majd a szolgáltatás újraindítása után is létezni fog, mert a szolgáltatás a merevlemezen tárolja a tartós sort, és amikor a szolgáltatást újraindítják, újra létrehozza a korábban fenntartott sort. A sor tartósan megmaradható, de az, hogy a bent üzenetek tartósak-e, az az üzenet kitartási beállításaitól függ. Más szóval, ha az újraindítás előtt nem küldött üzenetet a sorban, az eredeti üzenet a sorban marad-e az újraindítás után attól, hogy az üzenet küldésekor megjelent üzenetbeállítások történtek. Ha az üzenetek állandóak maradnak egy újraindítás után, be kell állítanod az üzenet megmaradásának azonosítóját.
Állítsuk be a queue tartósságot:
A metódus negyedik paramétere, az autoDelete, általában "hamis" (hamis) módra kerül. A dokumentáció ezt a paramétert leírja, ha igaz, ami azt jelenti, hogy ha a sorban már nem használatos (nem előfizetett), a szerver törli azt. A tesztelés során, amíg a kapcsolatváltási sorban minden címzett meg van kapcsolva, a sor törlődik, még akkor is, ha még mindig vannak benne feldolgozatlan üzenetek. RabbitMQ újraindítása is eltávolítja őket. Ha hamisat írnak be, a szolgáltatás nem törli a sort, és az üzenetek akkor is megjelennek a sorban, ha az összes hozzá csatlakoztatott kliens megszakad. A feladó akkor is tehet üzeneteket a változási sorba, ha nincs kliens kapcsolat, és amikor a kliens megjelenik, megkapja ezeket az üzeneteket. Ha azonban a RabbitMQ szolgáltatást újraindítják, a sort eltűnik, és az üzenetek természetesen eltűnnek.
A harmadik paraméter exkluzív, és a dokumentáció szerint ha igaz, akkor a sor kapcsolata megszakad, majd a sor, beleértve az üzeneteket is, törlik.
A második paraméter, a tartós, a dokumentációban úgy szerepel, hogy ha igaz, akkor egy tartós sorban áll, amely a szolgáltatás újraindítása után is létezni fog. Mivel a szolgáltatás a merevlemezen tárolja a tartós sort, és amikor a szolgáltatást újraindítják, megerősíti ezt a sort. Természetesen akkor kell lennie, ha mind az automatikus törlés, mind az exkluzív hamis. A sor tartósan megmaradható, de az, hogy a bent üzenetek tartósak-e, az az üzenet kitartási beállításaitól függ. Más szóval, ha az újraindítás előtt még mindig vannak üzenetek a sorban, az eredeti üzenet a sorban van-e az újraindítás után is, attól függ, hogy a küldő beállításai az üzenet küldésekor megjelentek.
Miután módosítottuk a kódot, megpróbáljuk futtatni, és a hiba a következő lesz:
Kezeletlen kivétel: RabbitMQ.Client.Exceptions.OperationInterruptedException: Az AMQP művelet megszakításra került: AMQP close-reason, Peer indította, code=406, text="PRECONDITION_FAILED - inequivalent arg 'durable' a vhost 'myserver' 'hello' sorához: kapott 'true', de current 'hamis'", classId=50, methodId=10, cause=
Mert definiáltunk egy tartós nélküli sort, amit hello-nak hívnak. A RabbitMQ nem engedélyezi a meglévő sorok újradefiniálását különböző paraméterbeállításokkal.
Két megoldás létezik:
1: Új bejelentés egy másik nevű sort, például my_queue 2: Töröld a definiált "hello" sort http://localhost:15672 címmel, és jelentkezz be a felhasználónévvel és jelszóval. A RabbitMQ alapértelmezett jelszó és felhasználónév vendég. Kattints a "queue" oszlopra, hogy lásd a sorlistát, kattints a "hello" sorra a sor részleteinek bővítéséhez. Húzd az oldalt a végére, ott van egy "Törlés" tétel, kattints rá, kattints rá, kattints a "Sorba törlése" gombra, és törölheted a sort. Amikor a kódot futtatják, létrejön egy hello queue, amely támogatja a kitartást.
Az üzenetek tartóssága
Ha az üzenetet akarod tartósan tartani egy újraindítás után, be kell állítanod az üzenetet, hogy tartós legyen. A beállítás akkor történik, amikor a feladó elküldi, ami viszonylag egyszerű, és a kód a következő:
A DeliveryMode alapértelmezettként 1, nem tartós, és ha 2-re állítom, az üzenet tartós
Miután módosítottuk a kódot, megpróbáljuk csak a producer programot megnyitni az üzenetek küldéséhez, majd újraindítjuk a rabbitMQ szolgáltatást, újra megnyitjuk a fogyasztót, és azt találjuk, hogy az üzenet nem veszett el.
(Vége)
Csatolva van a C# forráskód:
Turisták, ha szeretnétek megnézni ennek a bejegyzésnek a rejtett tartalmát, kérlek Válasz
|
Előző:Kivétel üzenet: "StrongTypingException: IsPrima...Következő:Bevezetés a C# küldöttekhez (delegált, akció, funkció, predikátum)
|