2016-07-15 12 views
1

私は、root(after/user /)アクター(system.actorOf)の作成は高価であることを読んだ。工場出演者のパターン

ClientFactoryActorを作成する共通のパターンがあります。主な責任は、要求に応じて新しいアクタを返すことです(たとえば、クライアントごとに新しいwebsocketアクタが必要な場合など)。

+0

メモリリークを避けるために、俳優を殺すのを忘れないでください。 – ipoteka

答えて

1

実際には、エラー処理の目的のためにアクターの階層を維持しようとするべきです(異なる監督戦略) アクターを作成する便利な方法の1つは、必要なアクターへの参照をインスタンス化したコンパニオンオブジェクトを持つことです与えられたパラメータ(シングルトン工場)

object DemoActor { 
     /** 
     * Create Props for an actor of this type. 
     * 
     * @param magicNumber The magic number to be passed to this actor’s constructor. 
     * @return a Props for creating this actor, which can then be further configured 
     *   (e.g. calling `.withDispatcher()` on it) 
     */ 
     def props(magicNumber: Int): Props = Props(new DemoActor(magicNumber)) 
    } 

    class DemoActor(magicNumber: Int) extends Actor { 
     def receive = { 
     case x: Int => sender() ! (x + magicNumber) 
     } 
    } 

    class SomeOtherActor extends Actor { 
     // Props(new DemoActor(42)) would not be safe 
     context.actorOf(DemoActor.props(42), "demo") 
     // ... 
    } 

一つの良い出発点はAkka documentationページです。

関連する問題