Sto cercando informazioni sull'approccio migliore alla convalida dei messaggi nei servizi basati su messaggistica asincrona (ovvero servizi che estraggono messaggi da una sorta di coda di messaggi o broker, piuttosto che fornire un'API basata su HTTP o qualcosa di simile richiesta -risposta orientata).
In un'API HTTP, se il messaggio non è valido (campi errati, JSON / XML / Qualunque) non valido, puoi restituire un errore 400. Il servizio di ricezione può continuare come prima e il mittente deve gestire l'errore. (Molte librerie HTTP generano un'eccezione quando viene restituita una risposta non 200, rendendo molto chiara la fonte del problema.)
Con i processi di messaggistica asincrona, posso pensare ad alcuni approcci:
- Il processo di ricezione gestisce l'errore in qualche modo.
- Il servizio di ricezione ignora solo i messaggi che non sono validi.
- Il servizio ricevente registra il messaggio non valido e quindi passa al messaggio successivo. Se le cose non sembrano funzionare correttamente, si spera, possiamo individuare il problema nei registri.
- Il servizio di ricezione invia una notifica di errore su un qualche tipo di canale di risposta.
Nessuna di queste opzioni sembra particolarmente buona.
L'opzione (1) è in realtà solo una "mano d'onda" nella direzione di una soluzione ancora sconosciuta.
Le opzioni (2) - (3) sembrano correre il rischio che i problemi nel codice del mittente vengano mascherati e resi difficili da identificare (rispetto alla situazione richiesta-risposta, dove è possibile identificare immediatamente una risposta 400, che si verifica in una "posizione" strettamente collegata alla fonte dell'errore).
L'opzione (4) sembra tentare di ricreare un sistema di richiesta / risposta, annullando qualsiasi motivo per optare per un sistema basato su messaggistica asincrona. Se hai intenzione di richiedere / risposta, perché dovresti utilizzare un sistema basato sul broker di messaggi in primo luogo?
Gradirei qualsiasi informazione sulle migliori pratiche e su come la tensione descritta sopra potrebbe essere risolta.