2

有人对如何管理大量 akka 演员的创建有任何建议吗?

我的新中间件项目目前包含大约 10 个参与者,但随着时间的推移,这将不可避免地增长到很高的数量。我正在我的main函数中创建我的所有演员,但是随着系统的增长,这可能会失去控制,函数跨越整个屏幕。

我当然可以将所有的演员创建​​移动到一个单独的类中的一个函数中,尽管这并不能真正解决问题。

我不确定是否有任何模式可用于帮助管理此设置过程?

4

3 回答 3

3

通常应该只有几个顶级Actor(即使用system.actorOf 创建的那些)。这是因为如果所有 Actor 都为其他 Actor 破坏事物的可能性相同,那么您的容错能力就会非常差。所以你应该做的是考虑你希望如何将失败包含在你的应用程序中,然后使用 context.actorOf 将actor创建为其他actor的子级。

于 2012-07-17T18:32:22.310 回答
2

这真的取决于演员的关系。如果他们彼此之间没有父/子关系,那么您从哪里开始并不重要。如果他们有这样的关系,你应该在他们的父母中开始你的演员,因为你必须使用context父母演员的 创造另一个演员作为它的孩子。

于 2012-07-17T16:27:17.523 回答
1

如果不了解您正在创建的演员的性质,很难回答您的问题。例如,如果你可以对你的演员进行逻辑分组,我会做这样的事情:

def initialize() = {

    // Initialize Misc actors
    val foo = FooActor()
    val bar = BarActor()

    initializeActorsThatDoStuff()
    initializeActorsThatDoOtherStuff()

}

如果他们有父/子关系,您应该按照@drexin 的建议进行操作。


编辑:几乎忘记了:我正在创建具有不同参数的多个相同类型的演员,我当然会使用循环而不是复制和粘贴,例如

def initializeLotsOfActors(num:Int) =
    for(i <- 0 to num) new ActorThatTakesAnInt(i);

(因为没有人喜欢复制和粘贴:D)

于 2012-07-17T17:21:22.500 回答