Questo è stato a mio avviso poiché ho sviluppato diverse applicazioni con questa funzione.
Supponiamo che sia richiesta un'applicazione per elaborare le richieste in entrata in modo asincrono. Prendiamo l'esempio di un sistema di notifica (altri agenti invieranno una richiesta di notifica per notificare le persone via email o testo, ecc.) In questo caso questa applicazione richiede di chiamare altri sistemi esterni (server smtp nel nostro esempio). Questi sistemi esterni potrebbero essere temporaneamente disattivati, pertanto è necessario un nuovo meccanismo (fino a un certo numero di tentativi).
Ci sono biblioteche che offrono un modo per riprovare, come Polly. L'idea è che l'applicazione ritenterà X volte con ritardo D. Ma il problema è che l'elaborazione della richiesta viene eseguita in memoria durante tutto il processo di ripetizione, rendendo la risorsa inefficiente.
Quale sarebbe uno schema plausibile per questo tipo di problemi? Quali sono alcune considerazioni o piattaforme che dovrei esaminare? Che cosa hai fatto quando hai affrontato un problema simile?
Ogni volta che ho affrontato questo problema, l'ho risolto con una tabella che contiene le attività che devono essere elaborate. Li elaboro in batch e aggiorno i loro stati (NEW, IN_PROGRESS, ERROR). Questo meccanismo è utile per avere un'istanza, ma una volta che ho più istanze, il blocco della tabella è necessario in modo che nessuna istanza non elabori la stessa richiesta. Sembra che ci sia una soluzione migliore per questo problema.