Il mio progetto ha un'integrazione con un sistema esterno. Dobbiamo inviare alcune informazioni importanti a questo sistema. Per questo, creiamo un micro servizio per connetterci a questo sistema esterno. Questo micro servizio riceve messaggi asincroni dai nostri sistemi interni in una coda dedicata per questo, e il servizio micro legge i messaggi e prova a inviarli al sistema esterno. Molto semplice.
Prima di spiegare il mio dubbio, ti metto ragazzi sul contesto.
Contesto
Siamo non sicuri se questo sistema esterno è affidabile . A volte il sistema esterno sarà spento e abbiamo bisogno di un modo per recuperare da questo. Quindi implementiamo un meccanismo dei tentativi . Ma immaginiamo anche che questo sistema esterno potrebbe essere spento per un sacco di tempo e forse anche rifiutare alcuni messaggi validi fino a quando non parleremo con il team di supporto. Pertanto, creiamo anche una Dead Letter Queue duratura per ricevere questi messaggi rifiutati.
Nello scenario peggiore, ci saranno molti messaggi sulla coda DLQ per analizzare la causa del perché sono stati rifiutati. Quindi il mio team ha l'idea di estrarre i messaggi dalla coda DLQ e persisterli come Json in un database, perché noi immaginiamo che sarà necessario modificarli.
La domanda
E la mia domanda riguarda questo ultimo paragrafo: salva i messaggi sul database. Non sono sicuro che sia una buona idea, mi sembra che stiamo semplicemente replicando la funzionalità duratura della coda su un database.
L'idea è nata dal fatto che i messaggi sul database saranno più facili da analizzare ( forse avremo bisogno di farlo), modificali ( forse faremo hai bisogno, probabilmente non ) e hai un modo più affidabile di manipolare i messaggi, perché un errore nella gestione di RabbitMQ e il messaggio sono spariti. Avremo anche bisogno di qualche tipo di cron job per leggere questi messaggi dal database e inviarli di nuovo per la coda principale.
Come vedi, ci sono un sacco di forse e un sacco di lavoro extra (database, tabelle, cron job, ecc.) e non mi sento molto a mio agio con la soluzione. Naturalmente saremo più sicuri se i messaggi possano essere analizzati e modificati su un database relazionale, ma non sono sicuro che useremo questa funzione in futuro.
Ho fatto alcune ricerche sull'uso di RabbitMQ per i messaggi rifiutati che potrebbero essere analizzati per il team e inviati nuovamente alla coda principale, ma questo non è uno scenario comune.