Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 26359|Risposta: 2

Un'analisi approfondita del meccanismo di risposta ai messaggi di RabbitMQ

[Copiato link]
Pubblicato su 30/03/2018 10:42:59 | | | |


Quando il consumatore riceve il messaggio e il compito di elaborazione è completato, invierà un ack con questo identificatore del messaggio per informare il server che il messaggio è stato ricevuto e che l'elaborazione è completata. RabbitMQ attende che il collegamento del consumatore che elabora un messaggio venga perso prima di determinare che il messaggio non è stato elaborato correttamente, quindi RabbitMQ ritrasmette il messaggio.
La conferma dei messaggi è disattivata di default. C'è un parametro noAck quando si inizializza Consumer,Se impostato su vero, il consumatore risponderà con un ack non appena riceve il messaggio


In generale, lo scenario comunemente usato noack è generalmente valido, ma per progetti con requisiti ad alto rischio, come il pagamento. Per ogni messaggio, dobbiamo garantirne l'integrità e la correttezza. Dopo aver ricevuto il messaggio, devi confermare che la logica di business corretta sia stata eseguita, e poi restituire attivamente un ack al server. Puoi visualizzare i messaggi nella coda tramite il comando rabbitmqctl list_queues nome message_rady message_unacknowleded, oppure tramite l'interfaccia di gestione background.

Se noAck è impostato su falso, il client deve inviare attivamente un ack al server e, se il client non conferma il messaggio, si verifica la seguente situazione:



Finché il programma è ancora in esecuzione, questi 10 messaggi rimangono non inseriti e non possono essere riconsegnati da RabbitMQ. Ciò che è ancora più potente è cheIl consumo dei messaggi di RabbitMQ non ha un meccanismo di timeout, cioè, se il programma non viene riavviato, il messaggio sarà sempre nello stato Uncked. Non dimenticare questi messaggi di stato non registrati quando lavori sugli eventi operativi.

Pronto

I messaggi con questo stato esistono nella coda da elaborare.

Non riconosciuto

Un messaggio in questo stato indica che è già in fase di elaborazione ma non è stato confermato.




Quando il programma è chiuso (finché il Consumer è chiuso), questi 10 messaggi torneranno allo stato Ready.


Messaggio di conferma

E se il client invia un ack al server? Cioè, confermare la ricezione del messaggio? Il codice è il seguente:


Quando il secondo parametro del metodo BasicAck, multiple, viene impostato su false, significa che RabbitMQ viene notificato che il messaggio corrente è stato confermato.Se vero, verrà riconosciuto un messaggio aggiuntivo più piccolo del tag di consegna specificato dal primo parametro。 (La conferma in blocco riguarda l'intero canale)

Annulla conferma

E se uno dei client del programma distribuito ha un'eccezione e vuole annullare la conferma del messaggio lasciando che altri client elaborino il messaggio?

Quando c'è un'eccezione nel messaggio di consumo, dobbiamo annullare la conferma, e poi possiamo usare il metodo basicReject di Channel.

Il primo parametro specifica il tag di consegna, mentre il secondo parametro descrive come gestire questo messaggio di fallimento.Un valore di vero significa che il messaggio viene reinserito nell'intestazione della coda, mentre un valore di falso significa che il messaggio è stato abbandonato




Precedente:Ti insegno come configurare il tuo server DNS!
Prossimo:Baidu Maps per ottenere le coordinate della città
Pubblicato su 22/09/2021 20:49:04 |
Impara a imparare...
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com