有没有人对如何管理大量akka演员的创作有任何建议?
我的新中间件项目目前包含大约10名演员,但随着时间的推移,这将不可避免地增长到很多。我正在我的main
函数中创建所有演员,但随着系统的增长,这可能会失控,功能跨越整个屏幕。
我当然可以将所有的actor创建移动到一个单独的类中的函数中,尽管这并没有真正解决这个问题。
我不确定是否有任何模式可用于帮助管理此设置过程?
答案 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)