6

ActorPublisherをAkka-Stream として使用していSourceます。入力アクターに予想通りの名前を付けて、アプリケーションの他の部分からメッセージを送信できるようにする方法がわかりません。ソースを次のようにインスタンス化しています。

val src = Source[Task](Props(classOf[TaskListener], this), "task-listener")

ストリームをActorRef実体化するとエラーが発生しますが、そのパスは動的に生成され、コードで生成されたフロー中心の命名スキームの一部として提供された名前のみを使用します。

このフロントエンドのアクター ソースに明示的な名前を付ける方法はありますか?

明示的に名前を付けられない場合、Akka-Stream をリモートで直接使用できないということですか?

編集:相対パスを使用して自分のアクターを見つけることができますがFlow、問題のアクターへのフルパスがどうなるかを理解できるように、自分の名前を付ける方法を理解する必要があります。

編集:(以下のakkaバージョン情報、scala 2.11.6)

"com.typesafe.akka" %% "akka-actor" % "2.3.9"
"com.typesafe.akka" %% "akka-stream-experimental" % "1.0-M4"

編集: akka-user google グループの友好的な人々が私に啓蒙し、これに対処する適切な方法は、呼び出し自体ActorRefの結果であるを使用せずに渡すことであると示唆しています。この状況が将来変化することがわかった場合は、この質問を更新します。読んでくれてありがとう。runWith().actorSelection()

4

1 に答える 1

2

これを解決する良い方法は、特定のパスを持つグループ ルーターを追加することです。その後、アクター (ルート) を見つけることができる場所をルーターに伝えることができます。

これを行うことで、具体的なアクター グループを分離し、ルーターを介してソース プールへの単一のエントリ ポイントを維持します。また、将来このルーター クラスターを認識させることもできます。

ActorFlowMaterializer を調べることもできます - http://doc.akka.io/api/akka-stream-and-http-experimental/1.0-M5/index.html#akka.stream.ActorFlowMaterializer自体。このコメントはソース コードにあります。

/** The `namePrefix` is used as the first part of the names of the actors running
  * the processing steps. The default `namePrefix` is `"flow"`. The actor names are built up of
  * `namePrefix-flowNumber-flowStepNumber-stepName`.
  */
def create(settings: ActorFlowMaterializerSettings, context: ActorRefFactory, namePrefix: String): ActorFlowMaterializer =
apply(Option(settings), Option(namePrefix))(context)
于 2015-04-07T00:48:10.173 に答える