Ric*_*nry 6 scala akka akka-stream
我使用的ActorPublisher是Akka-Stream Source.我无法弄清楚如何可预测地命名输入actor,以便我可以从我的应用程序的其他部分发送消息.我正在实例化我的源代码:
val src = Source[Task](Props(classOf[TaskListener], this), "task-listener")
Run Code Online (Sandbox Code Playgroud)
我ActorRef在实现流时获得了一个,但是它的路径是动态生成的,它只使用我提供的名称作为代码生成的以流为中心的命名方案的一部分.
有没有办法让这个前端演员源有一个明确的名称或我是否卡住传递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"
Run Code Online (Sandbox Code Playgroud)
编辑:在akka用户谷歌小组的友好伙伴已经启发了我,并建议处理这个问题的正确方法是通过调用本身而不是使用来传递ActorRef结果.如果我发现这种状况将来会发生变化,我会更新这个问题.谢谢阅读.runWith().actorSelection()
解决这个问题的好方法是添加具有特定路径的组路由器,然后您可以告诉路由器在哪里可以找到您的参与者(路由)。
通过这样做,您将解耦具体的参与者组,并通过路由器维护源池的单点入口。此外,您将来还可以让该路由器集群感知。
您还可以查看 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)
Run Code Online (Sandbox Code Playgroud)