gpt4 book ai didi

scala - 有没有办法使用 Akka-Stream 获得可预测的 Actor 命名?

转载 作者:行者123 更新时间:2023-12-04 15:43:19 27 4
gpt4 key购买 nike

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

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

我收到了 ActorRef当我实现流时,但它的路径是动态生成的,它只使用我提供的名称作为代码生成的以流为中心的命名方案的一部分。

有没有办法让这个前端 Actor 源有一个明确的名字,或者我是否坚持传递 ActorRef ?

如果我不能明确命名,这是否意味着您不能直接通过远程处理使用 Akka-Stream?

编辑:我现在可以使用相对路径找到我的 Actor ,但我仍然需要弄清楚如何命名我的 Flow所以我可以了解相关 Actor 的完整路径是什么。

编辑: (下面的 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 group 的友好人士启发了我,并建议处理这个问题的正确方法是绕过 ActorRef来自 runWith() 的结果调用自身而不使用 .actorSelection() .如果我发现这种情况在 future 发生变化,我会更新这个问题。谢谢阅读。

最佳答案

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

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

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

关于scala - 有没有办法使用 Akka-Stream 获得可预测的 Actor 命名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29476654/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com