1

私は長時間実行されているプロセスを持っています.2時間から1日としましょう。各プロセスは、更新メッセージでライフサイクルを開始し、さらに同時更新をリッスンし続けます。更新メッセージには、一意のターゲット識別子があります。

各プロセスをアクターで表現したい場合、アクターを初期化するにはどうすればよいですか? 更新メッセージの識別子の値に基づいて、アトミックな検索/作成操作を行う必要があることは明らかですか? これをscala/akkaで設計するにはどうすればよいですか?

4

2 に答える 2

1

これらのプロセス アクター (アクターなど) の管理を実行する単一のアクターをセットアップしますProcessManager。このアクターは、特定のプロセス ID のプロセス アクターを取得するリクエストをサポートします。内部的には、その子が既に存在するかどうかを確認します。sender存在する場合、その参照で応答します。そうでない場合は、それを作成し、senderその参照で に応答します。このマネージャ アクターは、(すべてのアクターが行うように) メールボックスをシリアルに処理するため、ルックアップ/作成の競合状態について心配する必要はありません。これの非常に単純化された例:

case class GetProcessHandler(processId:Int)

class ProcessManager extends Actor{

  def receive = {
    case GetProcessHandler(id) =>
      val name = s"proc_$id"
      val handler = context.child(name).getOrElse(
        context.actorOf(Props[ProcessHandler], name)
      )
      sender ! handler
  }
}

class ProcessHandler extends Actor{
  def receive = {
    ...
  }
}
于 2014-12-11T18:31:17.930 に答える
0

で開始アクターを指定できますapplication.conf。そしてmain、ActorSystem を使用して、プログラムでこれらのアクターを作成/初期化できます。

于 2014-12-11T18:13:59.393 に答える