62 votes

Dois-je réutiliser le même système Akka ActorSystem ou puis-je en créer un à chaque fois que j'en ai besoin?

Akka 2.x nécessite de nombreuses commandes pour faire référence à un ActorSystem. Ainsi, pour créer une instance d'un acteur MyActor vous pourriez dire:

val system = ActorSystem()
val myActor = system.actorOf(Props[MyActor])

En raison de la fréquente nécessité d'un ActorSystem: de nombreux exemples de code omettre la création du code et de supposer que le lecteur sait d'où un system variable.

Si votre code produit acteurs dans des endroits différents, vous pouvez dupliquer ce code, éventuellement, la création de nouvelles ActorSystem des cas, ou vous pourriez essayer de partager le même ActorSystem exemple en se référant à certains globale ou par la transmission de l' ActorSystem autour de.

Akka documentation fournit un aperçu général des systèmes d'acteurs sous la rubrique 'Acteur des Systèmes, et il y a de la documentation de l' ActorSystem classe. Mais aucun de ces d'une grande aide dans l'explication de pourquoi un utilisateur d'Akka ne pouvez pas simplement compter sur Akka pour gérer ce sous le capot.

Question(s)

  • Quelles sont les implications de partager le même ActorSystem objet ou d'en créer un nouveau à chaque fois?

  • Quelles sont les meilleures pratiques? De passage autour de l' ActorSystem tous le temps semble étonnamment lourd.

  • Quelques exemples de donner l' ActorSystem un nom: ActorSystem("MySystem") autres juste appelez - ActorSystem(). Quelle différence cela fait-il, et si vous utilisez le même nom à deux reprises?

  • N' akka-testkit exigent que vous partagent ActorSystem avec celui que vous avez passer à l' TestKit constructeur?

49voto

drexin Points 13865

La création d'un ActorSystem est très cher, donc vous voulez éviter de créer un nouveau à chaque fois que vous en avez besoin. Aussi vos acteurs doivent s'exécuter dans le même ActorSystem, sauf s'il y a une bonne raison pour eux de ne pas. Le nom de la ActorSystem est également de la partie le chemin pour les acteurs que courir en elle. E. g. si vous créez un acteur dans un système nommé MySystem il aura un chemin comme akka://MySystem/user/$a. Si vous êtes un acteur contexte, vous avez toujours une référence à la ActorSystem. Dans une Acteur de, vous pouvez appeler context.system. Je ne sais pas ce akka-testkit attend, mais vous pouvez prendre un coup d'oeil à la akka tests.

Donc, pour résumer, vous devez toujours utiliser le même système, sauf si il y a une bonne raison de ne pas le faire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X