Denne artikkelen er en speilartikkel om maskinoversettelse, vennligst klikk her for å hoppe til originalartikkelen.

Utsikt: 26359|Svare: 2

En grundig analyse av mekanismen bak RabbitMQ-meldingsvaret

[Kopier lenke]
Publisert på 30.03.2018 10:42:59 | | | |


Når forbrukeren mottar meldingen og behandlingsoppgaven er fullført, sender den en ack med denne meldingsidentifikatoren for å fortelle serveren at meldingen er mottatt og at behandlingen er fullført. RabbitMQ venter til lenken til forbrukeren som behandler en melding er tapt før den fastslår at meldingen ikke ble behandlet korrekt, så RabbitMQ sender meldingen på nytt.
Meldingsbekreftelse er slått av som standard. Det finnes en noAck-parameter når man initialiserer Consumer,Hvis den settes til true, vil forbrukeren returnere en ack så snart meldingen mottas


Generelt sett er det ofte brukte scenarioet noack satt til sant, men for prosjekter med høye risikokrav, som betaling. For hver melding må vi sikre dens integritet og korrekthet. Etter å ha mottatt meldingen, må du bekrefte at riktig forretningslogikk er utført, og deretter aktivt returnere en ack til serveren. Du kan se meldingene i køen via rabbitmqctl list_queues navn message_rady message_unacknowleded kommando, eller via bakgrunnshåndteringsgrensesnittet.

Hvis noAck settes til false, må klienten aktivt sende en ack til serveren, og hvis klienten ikke bekrefter meldingen, vil følgende situasjon oppstå:



Så lenge programmet fortsatt kjører, forblir disse 10 meldingene uferdige og kan ikke leveres på nytt av RabbitMQ. Det som er enda kraftigere, er atRabbitMQ-meldingsforbruk har ikke en timeout-mekanisme, det vil si, hvis programmet ikke startes på nytt, vil meldingen alltid være i Unacked-tilstanden. Ikke glem disse uferdige tilstandsmeldingene når du jobber med operasjonsarrangementer.

Klar

Meldinger med denne statusen finnes i køen som skal behandles.

Uanerkjent

En melding i denne statusen indikerer at den allerede er under behandling, men ikke bekreftet.




Når programmet er lukket (så lenge forbrukeren er lukket), vil disse 10 meldingene returnere til Ready-tilstanden.


Bekreftelsesmelding

Hva om klienten sender en ack til serveren? Altså, bekrefte mottakelsen av meldingen? Koden er som følger:


Når den andre parameteren i BasicAck-metoden, multiple, settes til falsk, betyr det at RabbitMQ blir varslet om at den nåværende meldingen er bekreftet.Hvis det er sant, vil en ekstra melding mindre enn leveringstaggen spesifisert av den første parameteren bli bekreftet。 (Massebekreftelse gjelder for hele kanalen)

Avbryt bekreftelsen

Hva om en av klientene i det distribuerte programmet har et unntak og ønsker å avbryte bekreftelsen av meldingen og la andre klienter behandle meldingen?

Når det er et unntak i forbruksmeldingen, må vi avbryte bekreftelsen, og deretter kan vi bruke basicReject-metoden i Channel.

Den første parameteren spesifiserer leveringstaggen, og den andre parameteren beskriver hvordan denne feilmeldingen skal håndteres.En verdi true betyr at meldingen legges tilbake i køhodet, og en verdi false betyr at meldingen forlates




Foregående:Lære deg hvordan du setter opp din egen DNS-server!
Neste:Baidu-kart for å få bykoordinater
Publisert på 22.09.2021 20:49:04 |
Lær å lære...
Ansvarsfraskrivelse:
All programvare, programmeringsmateriell eller artikler publisert av Code Farmer Network er kun for lærings- og forskningsformål; Innholdet ovenfor skal ikke brukes til kommersielle eller ulovlige formål, ellers skal brukerne bære alle konsekvenser. Informasjonen på dette nettstedet kommer fra Internett, og opphavsrettstvister har ingenting med dette nettstedet å gjøre. Du må fullstendig slette innholdet ovenfor fra datamaskinen din innen 24 timer etter nedlasting. Hvis du liker programmet, vennligst støtt ekte programvare, kjøp registrering, og få bedre ekte tjenester. Hvis det foreligger noen krenkelse, vennligst kontakt oss på e-post.

Mail To:help@itsvse.com