2016-11-04 2 views
1

Je ne suis pas sûr de l'approche à suivre pour la supervision d'Akka.Akka - quoi après qu'un acteur a été arrêté?

J'ai un acteur Akka qui liste les fichiers d'un serveur FTP lorsqu'un message le déclenche. Si la connexion est rompue, l'acteur échouera avec une exception (disons, IOException) qui déclenchera la supervision. À ce stade, je vois deux alternatives:

  • Je continue à reprendre/redémarrer l'acteur jusqu'à ce que le serveur est reconnecté, peut-être avec une réduction de puissance exponentielle
  • I définir les paramètres (tels que maxNrOfRetries = xy) d'une manière que le superviseur abandonne et arrête l'acteur après xy fois

La première stratégie semble inutile, mais la seconde semble apporter un autre problème: comment l'acteur serait éventuellement redémarré? J'ai le sentiment que régler les paramètres du superviseur Backoff est la meilleure façon de procéder, mais peut-être qu'il me manque quelque chose?

+0

Je ne suis pas sûr de comprendre la question. Les deux politiques semblent valables dans certains contextes, cela dépend vraiment de ce que vous voulez réaliser. Le principal point de décision est ce qui attend la réponse? Est-il pertinent de répondre dans 10 minutes? 10 heures ? Si c'est un client http, abandonner semble juste, par exemple. – C4stor

Répondre

0

Si vous avez besoin de redémarrer l'acteur par la suite sans savoir quand la connexion sera de nouveau en hausse, la réduction exponentielle (avec une limite supérieure de disons 60 secondes?) Semble raisonnable. De cette façon, vous avez une reconnexion rapide si la connexion est juste perdue pendant quelques secondes et avec le retour de vos ressources pas gaspiller. La limite supérieure de la rétrogradation définit la durée maximale hors connexion de votre acteur, même si la connexion peut être rétablie.