6

我正在使用 aActorPublisher作为 Akka-Stream Source。我不知道如何以可预测的方式命名输入参与者,以便我可以从我的应用程序的其他部分向它发送消息。我正在像这样实例化我的源:

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

当我实现流时,我得到一个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"

编辑: akka-user google 小组的友好人士启发了我,并建议处理这个问题的正确方法是传递调用本身的ActorRef结果而不是使用. 如果我发现这种情况在未来发生变化,我会更新这个问题。谢谢阅读。runWith().actorSelection()

4

1 回答 1

2

解决这个问题的好方法是添加具有特定路径的组路由器,然后你可以告诉路由器它在哪里可以找到你的演员(routees)。

通过这样做,您将解耦您的具体参与者组并通过路由器维护到您的源池的单点入口。此外,您将来还可以让这个路由器集群知道。

您还可以查看 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 回答