有人对如何管理大量 akka 演员的创建有任何建议吗?
我的新中间件项目目前包含大约 10 个参与者,但随着时间的推移,这将不可避免地增长到很高的数量。我正在我的main
函数中创建我的所有演员,但是随着系统的增长,这可能会失去控制,函数跨越整个屏幕。
我当然可以将所有的演员创建移动到一个单独的类中的一个函数中,尽管这并不能真正解决问题。
我不确定是否有任何模式可用于帮助管理此设置过程?
通常应该只有几个顶级Actor(即使用system.actorOf 创建的那些)。这是因为如果所有 Actor 都为其他 Actor 破坏事物的可能性相同,那么您的容错能力就会非常差。所以你应该做的是考虑你希望如何将失败包含在你的应用程序中,然后使用 context.actorOf 将actor创建为其他actor的子级。
这真的取决于演员的关系。如果他们彼此之间没有父/子关系,那么您从哪里开始并不重要。如果他们有这样的关系,你应该在他们的父母中开始你的演员,因为你必须使用context
父母演员的 创造另一个演员作为它的孩子。
如果不了解您正在创建的演员的性质,很难回答您的问题。例如,如果你可以对你的演员进行逻辑分组,我会做这样的事情:
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)