Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 26359|Antwoord: 2

Een diepgaande analyse van het mechanisme van RabbitMQ-berichtrespons

[Link kopiëren]
Geplaatst op 30-03-2018 10:42:59 | | | |


Wanneer de consument het bericht ontvangt en de verwerkingstaak is voltooid, stuurt hij een ack met deze berichtidentificatie om de server te laten weten dat het bericht is ontvangen en de verwerking voltooid is. RabbitMQ wacht tot de link van de consument die een bericht verwerkt verloren is voordat wordt vastgesteld dat het bericht niet correct is verwerkt, dus verzendt RabbitMQ het bericht opnieuw.
Berichtbevestiging is standaard uitgeschakeld. Er is een noAck-parameter bij het initialiseren van Consumer,Als deze op waar staat, zal de consument een ack teruggeven zodra hij het bericht ontvangt


Over het algemeen wordt het veelgebruikte scenario noack meestal als waar gezet, maar dan voor projecten met hoge risico-eisen, zoals betaling. Voor elk bericht moeten we de integriteit en correctheid ervan waarborgen. Na het verkrijgen van het bericht moet je bevestigen dat de juiste bedrijfslogica is uitgevoerd en vervolgens actief een ack terugsturen naar de server. Je kunt de berichten in de wachtrij bekijken via de rabbitmqctl-list_queues naam message_rady message_unacknowleded commando, of via de achtergrondbeheerinterface.

Als noAck op false is gezet, moet de client actief een ack naar de server sturen, en als de client het bericht niet bevestigt, doet zich de volgende situatie voor:



Zolang het programma nog draait, blijven deze 10 berichten ongebruikt en kunnen ze niet opnieuw worden geleverd door RabbitMQ. Wat nog krachtiger is, is datRabbitMQ-berichtconsumptie heeft geen timeout-mechanisme, dat wil zeggen, als het programma niet opnieuw wordt gestart, blijft het bericht altijd in de Unacked-toestand. Vergeet deze vervloekte staatsberichten niet bij het werken aan operationele evenementen.

Klaar

Berichten met deze status bestaan in de wachtrij die verwerkt moet worden.

Niet erkend

Een bericht in deze status geeft aan dat het al wordt verwerkt maar niet wordt erkend.




Wanneer het programma wordt gesloten (zolang de Consument gesloten is), keren deze 10 berichten terug naar de Klaar-status.


Bevestigingsbericht

Wat als de client een ack naar de server stuurt? Dat wil zeggen, de ontvangst van het bericht bevestigen? De code is als volgt:


Wanneer de tweede parameter van de BasicAck-methode, meervoudig, op false wordt gezet, betekent dit dat RabbitMQ wordt geïnformeerd dat het huidige bericht is bevestigd.Als het waar is, wordt een extra bericht kleiner dan de door de eerste parameter gespecificeerde afleveringstag bevestigd。 (Bulkbevestiging geldt voor het hele kanaal)

Bevestiging annuleren

Wat als een van de clients van het gedistribueerde programma een uitzondering heeft en de bevestiging van het bericht wil annuleren en andere clients het bericht laat verwerken?

Wanneer er een uitzondering in het consumptiebericht is, moeten we de bevestiging annuleren, en dan kunnen we de basicReject-methode van Channel gebruiken.

De eerste parameter specificeert de afleveringstag, en de tweede parameter beschrijft hoe dit foutbericht moet worden behandeld.Een waarde van waar betekent dat het bericht terug in de wachtrijheader wordt geplaatst, en een waarde van false betekent dat het bericht wordt verlaten




Vorig:Leer je hoe je je eigen DNS-server opzet!
Volgend:Baidu-kaarten om stadscoördinaten te verkrijgen
Geplaatst op 22-09-2021 20:49:04 |
Leer leren...
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com