Qual è un buon modo per fare in modo che un attore provi di nuovo qualcosa in caso di errore, ma con intervalli di tempo crescenti tra i tentativi? Diciamo che voglio che l'attore riprovi dopo 15 secondi, poi 30 secondi, poi ogni minuto per un numero limitato di volte.Akka: come pianificare i tentativi di fallimento con intervalli di ritardo crescenti?
Ecco cosa mi è venuta in mente:
- il metodo dell'attore che esegue il lavoro effettivo è un optional
RetryInfo
parametro che, se presente, contiene il numero del tentativi siamo attualmente in - in caso di fallimento, l'attore sarà inviarsi una nuova
ScheduleRetryMessage
conretryCount + 1
, poi gettare un RuntimeException - un altro attore supervisiona l'attore lavoratore mediante
new OneForOneStrategy(-1, Duration.Inf()
ritornoResume
come la sua direttiva. L'attore non ha stato, in modoResume
dovrebbe essere OK - sulla ricezione del
ScheduleRetryMessage
, l'attore sarà- se
retryCount < MAX_RETRIES
: usare scheduler di Akka per programmare l'invio di unRetryMessage
dopo il ritardo desiderato - altro: finalmente rinunciare, l'invio di un messaggio ad un altro attore per la segnalazione degli errori
- se
si tratta di una buona soluzione o c'è un approccio migliore?
Idea interessante, ci proverò. Grazie! –