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

Nézet: 26359|Válasz: 2

Mélyreható elemzés a RabbitMQ üzenetválasz mechanizmusáról

[Linket másol]
Közzétéve 2018. 03. 30. 10:42:59 | | | |


Amikor a fogyasztó megkapja az üzenetet és a feldolgozási feladat befejeződik, egy ack-et küld ezzel az üzenetazonosítóval, hogy jelezze a szervernek, hogy az üzenet megérkezett és a feldolgozás befejeződött. A RabbitMQ megvárja, amíg a felhasználó által feldolgozó link elveszik, mielőtt megállapítja, hogy az üzenetet nem megfelelően dolgozták fel, ezért a RabbitMQ újra továbbítja az üzenetet.
Az üzenet visszaigazolása alapértelmezés szerint ki van kapcsolva. A Consumer inicializáláskor van egy noAck paraméter,Ha igazra állítva, a fogyasztó azonnal visszaadja az ack-ot, amint megkapja az üzenetet.


Általánosságban elmondható, hogy a gyakran használt forgatókönyv noack általában valóra van állítva, de olyan projektek esetén, amelyek magas kockázatú követelményeket igényelnek, például fizetést. Minden üzenetnél biztosítani kell annak integritását és helyességét. Az üzenet megszerzése után meg kell győződnöd, hogy a helyes üzleti logika teljesített-e, majd aktívan vissza kell küldened egy ack-et a szervernek. A sorban lévő üzeneteket a rabbitmqctl list_queues néven message_rady message_unacknowleded parancson keresztül vagy a háttérkezelő felületen keresztül nézheted meg.

Ha a noAck hamisnak van beállítva, a kliensnek aktívan kell ACK-et küldenie a szervernek, és ha az ügyfél nem erősíti meg az üzenetet, a következő helyzet következik be:



Amíg a program működik, ezek a 10 üzenet maradnak befogadva, és a RabbitMQ nem tudja újra kézbesíteni. Ami még erősebb, hogyA RabbitMQ üzenetfogyasztásnak nincs időtúllépési mechanizmusa, vagyis ha a programot nem indítják újra, az üzenet mindig Unacked állapotban lesz. Ne felejtsd el ezeket a meggondolatlan állapotüzeneteket, amikor műveleti eseményeken dolgozik.

Készen állok

Az ilyen státuszú üzenetek a feldolgozandó sorban találhatók.

Nem ismert

Egy ilyen állapotban lévő üzenet azt jelzi, hogy már feldolgozás alatt áll, de nem ismerik vissza.




Amikor a program zárva van (amíg a Fogyasztó zárva van), ez a 10 üzenet visszatér a Ready állapotba.


Megerősítő üzenet

Mi van, ha az ügyfél küld egy ack-et a szervernek? Vagyis megerősíteni az üzenet megérkezését? A kódex a következő:


Amikor a BasicAck metódus második paramétere, a többszörös, hamisnak van állítva, az azt jelenti, hogy a RabbitMQ értesítést kap, hogy a jelenlegi üzenetet visszaigazolták.Ha igaz, akkor egy további üzenetet, amely kisebb, mint az első paraméter által megadott kézbesítési címke kerül visszaigazolásra。 (A tömeges megerősítés az egész csatornára vonatkozik)

Visszajelzés

Mi van, ha a megosztott program egyik kliense kivételt kap, és le akarja mondani az üzenet megerősítését, és hagyja, hogy más kliensek dolgozzák fel az üzenetet?

Ha kivétel van a fogyasztási üzenetben, törölnünk kell a megerősítést, és akkor használhatjuk a Channel basicReject módszert.

Az első paraméter megadja a szállítási címkét, a második pedig azt írja le, hogyan kezeljük ezt a hibaüzenetet.Az igaz érték azt jelenti, hogy az üzenet visszakerül a sorfejlécbe, a false érték pedig azt jelenti, hogy az üzenet elhagyatott




Előző:Megtanítalak, hogyan állíts be saját DNS szervert!
Következő:Baidu térképek a város koordinátáinak megszerzéséhez
Közzétéve 2021. 09. 22. 20:49:04 |
Tanulj meg...
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