¿Cuál es una buena manera de que un actor intente algo nuevamente cuando falla, pero con intervalos de tiempo crecientes entre los intentos? Digamos que quiero que el actor intente de nuevo después de 15 segundos, luego de 30 segundos, luego de cada minuto durante un número limitado de veces.Akka: ¿Cómo programar reintentos en fallas con intervalos de retardo crecientes?
Aquí es lo que he llegado con:
- el método del actor que realiza el trabajo real tiene un parámetro opcional
RetryInfo
que, si está presente, contiene el número de la reintento actualmente estamos en - en caso de fallo, el actor enviará sí mismo un nuevo
ScheduleRetryMessage
conretryCount + 1
, a continuación, lanzar una RuntimeException - otro actor supervisa el actor trabajador, utilizando
new OneForOneStrategy(-1, Duration.Inf()
regresarResume
como su directiva. El actor tiene ningún estado, por loResume
debería estar bien - al recibir el
ScheduleRetryMessage
, el actor se- si
retryCount < MAX_RETRIES
: utilizar el planificador de Akka para programar el envío de unRetryMessage
después de que el retardo deseado - otra cosa: por fin se dio por vencido, el envío de un mensaje a otro actor para el informe de errores
- si
¿es esta una buena solución o hay un mejor enfoque?
Idea interesante, intentaré eso. ¡Gracias! –