Ez a cikk egy tükör gépi fordítás, kérjük, kattintson ide, hogy ugorjon az eredeti cikkre.

Nézet: 44647|Válasz: 8

[WinForm] rabbitMQ Queue Queue Üzenet Kitartás [forráskóddal]

[Linket másol]
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érlekVálasz





Előző:Kivétel üzenet: "StrongTypingException: IsPrima...
Következő:Bevezetés a C# küldöttekhez (delegált, akció, funkció, predikátum)
Közzétéve 2018. 04. 09. 13:17:51 |
Tanulj meg
Közzétéve 2019. 06. 25. 23:22:47 |
Tanulj meg
Közzétéve 2019. 06. 29. 9:36:23 |
Miért nem láttam a demót, válaszolnom kell, hogy megnézzem
Közzétéve 2019. 07. 09. 17:34:42 |
C# forráskódot akarok
Közzétéve 2019. 07. 24. 14:21:51 |
Jó, pont erre van szükségem
Közzétéve 2020. 04. 11. 14:34:54 |
Tanuld meg
Közzétéve 2022. 01. 01. 14:45:24 |
1111111111111111
 Háziúr| Közzétéve 2023. 05. 03. 22:12:22 |
A RabbitMQ sorának paraméterei és jelentéseik


/**
* Új sort építsünk, amelyhez nevet kapunk, tartóssági zászlót, automatikus törlési zászlót és érveket.
* @param nevezze meg a sor nevét – nem szabad nullnak lennie; "" beállításra, hogy a bróker generálja a nevet.
* @param tartós igaz, ha tartós sorban állunk (a sor túléli a szerver újraindítását)
* @param exkluzív igaz, ha exkluzív sorban hirdetünk (a sort csak a deklarálók használják
* kapcsolat)
* @param automata törlés igaz, ha a szervernek törli a sort, amikor az már nem használatban
* @param argumentumokat a sorban való bevalláshoz használt argumentumokat
*/
public Queue(String name, boolean durable, boolean exclusive, boolean autoDelete, Map<String, Object> arguments) {
   Assert.notNull(name, "'name' nem lehet null");
   this.name = név;
   this.actualName = StringUtils.hasText(name) ? név
         : (Base64UrlNamingStrategy.DEFAULT.generateName() + "_awaiting_declaration");
   ez.durable = tartós;
   this.exclusive = exkluzív;
   this.autoDelete = autoDelete;
   this.arguments = érvek != null ? argumentusok: új HashMap<>();
}

Paraméter bevezetése:
1. név: a sor neve;
2. actualName: A sor valódi neve, a névparamétert alapértelmezés szerint használják, ha a név üres, a szabályok szerint generálnak egyet;
3. tartós: tartós-e;
4. Exkluzív: hogy kizárólagos vagy kizárólagos;
5. automatikus törlés: automatikusan törölni-e;
6. Argumentumok: A sor egyéb attribútumparaméterei a következő opciókat kínálják, lásd az Argumentumokat a 2. ábrán:
(1) x-message-ttl: az üzenet lejárati ideje milliszekundumokban;
(2) x-lejáratok: a sor lejárati ideje, mennyi ideig törlik a sor, ha nem érik el, egység: milliszekundum;
(3) x-max-length: a sor maximális hossza, ha meghaladja a maximális értéket, az üzenet törlődik a sorfejlécből;
(4) x-max-length-bytes: a sorban lévő üzenet tartalma a maximális helyet foglalja el, amelyet a memóriaméret korlátoz, és ha ez a küszöb túllépi, az üzenet törlődik a sorfejlécből;
(5) x-overflow: Állítsuk be a sorban lévő túlterhelési viselkedést. Ez határozza meg, mi történik az üzenettel, amikor elérik a sor maximális hosszát. Az érvényes értékek: drop-head, reject-publish vagy reject-publish-dlx. A Quorum sortípusok csak drop-fejet támogatnak;
(6) x-dead-letter-exchange: a holtbetűs csere neve, valamint azok az üzenetek, amelyek lejártak vagy töröltek (a hosszú sorban hossza vagy a küszöbértéket meghaladó hely miatt), meghatározható, hogy küldjék el a tőzsdére;
(7) x-dead-letter-routing-key: Az üzenet router kulcsa, amelyet akkor használnak, amikor az üzenetet elküldik a halott betűváltónak, ha nincs beállítva, akkor az üzenet eredeti útvonalkulcs értékét használják
(8) x-single-active-consumer: jelzi, hogy a sor egyetlen aktív fogyasztó-e, ha igaz, akkor csak egy fogyasztó fogyaszt el üzeneteket a regisztrált fogyasztói csoportban, a többieket figyelmen kívül hagyják, és hamis, amikor az üzenet minden fogyasztónak egy körben (alapértelmezett hamis)
(9) x-max-prioritás: a sorban támogatott maximális prioritások száma; Ha nincs beállítva, a sor nem támogatja az üzenetprioritást;
(10) x-queue-mode (lusta mód): Állítsd be a sort késleltetési módra, tartsd a lehető legtöbb üzenetet a lemezen a RAM-használat csökkentése érdekében; Ha nincs beállítva, a sor memóriagyorsítótárt tart, hogy az üzeneteket a lehető leggyorsabban továbbítsa;
(11) x-queue-master-locator: Állítsuk be a tükör sor master node információit klaszter módban.


Lemondás:
A Code Farmer Network által közzétett összes szoftver, programozási anyag vagy cikk kizárólag tanulási és kutatási célokra szolgál; A fenti tartalmat nem szabad kereskedelmi vagy illegális célokra használni, különben a felhasználók viselik az összes következményet. Az oldalon található információk az internetről származnak, és a szerzői jogi vitáknak semmi köze ehhez az oldalhoz. A fenti tartalmat a letöltés után 24 órán belül teljesen törölni kell a számítógépéről. Ha tetszik a program, kérjük, támogassa a valódi szoftvert, vásároljon regisztrációt, és szerezzen jobb hiteles szolgáltatásokat. Ha bármilyen jogsértés történik, kérjük, vegye fel velünk a kapcsolatot e-mailben.

Mail To:help@itsvse.com