Quelle est la meilleure façon pour un acteur d'essayer quelque chose de nouveau en cas d'échec, mais avec des intervalles de temps croissants entre les tentatives? Disons que je veux que l'acteur essaie à nouveau après 15 secondes, puis 30 secondes, puis chaque minute pour un nombre limité de fois.Akka: Comment planifier des nouvelles tentatives en cas d'échec avec des intervalles de retard croissants?
Voici ce que je suis venu avec:
- la méthode de l'acteur qui effectue le travail réel a un paramètre optionnel
RetryInfo
que, le cas échéant, contient le numéro de la nouvelle tentative, nous sommes actuellement en - en cas d'échec, l'acteur lui-même envoyer un nouveau
ScheduleRetryMessage
avecretryCount + 1
, puis jeter un RuntimeException - un autre acteur supervise l'acteur des travailleurs, en utilisant
new OneForOneStrategy(-1, Duration.Inf()
retourResume
comme sa directive. L'acteur n'a pas d'état, doncResume
devrait être OK - à la réception du
ScheduleRetryMessage
, l'acteur- si
retryCount < MAX_RETRIES
: utiliser le planificateur de Akka pour planifier l'envoi d'unRetryMessage
après le délai - souhaité autre: enfin abandonner, l'envoi d'un message à un autre acteur pour erreur de déclaration
- si
est-ce une bonne solution ou est-il une meilleure approche?
Idée intéressante, je vais essayer ça. Merci! –