我正在尝试在 Scala 中使用广播路由器,如果我没有记错的话,它应该如下所示:
val system = ActorSystem("My beautiful system")
val workerRouter = system.actorOf(Props[Agent].withRouter(BroadcastRouter(individualDefinitions.size)), name = "agentRouter")
这就是我的理解我正在关注的教程 http://doc.akka.io/docs/akka/2.0.2/intro/getting-started-first-scala.html.
工作路由器充当另一个参与者,我可以将消息发送到该路由器,该路由器会将它们发送到所有代理(与我拥有的单个定义一样多)。
问题是我想使用单独的定义来构建代理,它们实际上在构造函数中采用一些参数,而这些参数位于 individualDefinitions 中。
Q:我如何告诉路由器将这些参数作为构造函数的一部分传递给每个参数?
请注意,每个演员都应该有一个单独的定义,而且它们都是不同的。我无法在构造函数接收常量的相关问题中使用该解决方案:在 Akka Java actor 模型中,路由器可以使用非默认构造函数创建 actor 吗? https://stackoverflow.com/questions/12889490/in-akka-java-actor-model-can-a-router-create-actors-with-non-default-constructo
请注意,这里每个演员应该有不同的参数,如果其中一个演员重新启动,它应该获得与最初获得的相同参数。我不知道是否可以修改该解决方案来做到这一点。
一个可能的解决方案是使用参与者作为路由器,以分离创建(构造函数)和路由,如所讨论的Akka (java),向所有孩子进行非阻塞广播 https://stackoverflow.com/questions/15721741/akka-java-non-blocking-broadcast-to-all-children.
我不确定在这种情况下这是“正确”的方法。使用参与者作为路由器有几个问题(除了优雅之外)。我担心充当路由器的参与者会重新启动并失去所有订阅者。如果演员在半个循环中重新启动,如果我没有记错的话,一些演员也可能会错过一些消息。
谢谢。