Akka Actor设置:在Main方法或'Manager'类中?

时间:2012-07-17 16:19:31

标签: scala akka

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

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

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

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

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

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

答案 2 :(得分:1)

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

def initialize() = {

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

    initializeActorsThatDoStuff()
    initializeActorsThatDoOtherStuff()

}

如果他们有父/子关系你应该像@drexin建议的那样做。


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

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

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