2013-08-08 15 views
5

私の使用例は非常に単純です.2つのオブジェクト間で少数のメッセージ(< 100)を交換するために、Scalaのアクターは優れていました(軽量で、複雑なライフサイクル管理はなく、いつでも開始/終了できます)。Akkaには軽量の俳優はありますか?

今、私はScala ActorsからAkkaに移行していますが、もはやそれらの軽量Actorを見つけることはできません!

Akkaでは、ActorSystemの作成にActorSystem/Propsを作成するだけでなく、ActorSystemのライフサイクルを管理する必要があります。

複雑なActorSystemライフサイクル管理を必要としないAkkaアクタがありますか?

答えて

5

グローバルシングルトンオブジェクトに独自のデフォルトActorSystemを作成できます。手動で停止する必要はありません。プログラムのシャットダウン時に停止します。

UPD

がシャットダウンからJVMを保っからActorSystemを防ぐために、どのように解決するためにRoland Kuhnanswerを参照してください。

object global { 
    import com.typesafe.config.ConfigFactory 
    // From answer by Roland Kuhn 
    implicit lazy val actorSystem: ActorSystem = 
    ActorSystem("default", ConfigFactory.parseString("akka.daemonic=on")) 
} 

このような目的でpackage objectを使用できます。

また、軽量俳優の作成構文についてActorDSLを使用することができます。

import ActorDSL._ 
import global._ 

val a = actor(new Act { 
    become { 
     case msg => ... 
    } 
}) 
4

俳優はそれゆえ、彼らが必要なときに、もはやシャットダウンする必要があり、アクティブな処理エンティティです。 ActorSystemのライフサイクルを暗黙的に設定するには、akka.daemonic=onを設定します。これは、JVMがシャットダウンしないようにすることを意味しますが、メインプログラムが復帰したときにアクターが作業を完了できるようにすることもあなたの仕事です。

+0

ありがとうございました。 –

関連する問題