Akka演员preStart()& postStop()方法行为?

时间:2016-07-08 06:58:52

标签: scala akka

如果我有一个用于数据库访问的Actor,那么Actor是一个处理所有客户端的单例实例,还是多个客户端的多个实例?所有实例只调用一次Actor preStart()postStop()方法?或者在创建每个新的Actor实例时调用?将数据库初始化代码放在preStart()中,连接返回postStop()内的代码是不是很好?

由于

1 个答案:

答案 0 :(得分:2)

这有点像询问一个对象是否是一个单例。如果您只创建一个数据库Actor,它将表现为单例,但通常Actors是不是单例。

即使您刚刚创建了一个,您仍然需要考虑演员系统或主管何时重新启动它。

[更新]

为每个Actor调用生命周期方法 - 它们是独立的实体。

如果要创建一个Actor来处理数据库请求/数据访问,我可能只有一个具有单例语义的Actor,但在内部它可以创建和监督实际处理数据库调用的Actors或者很少的Actors。这将允许您在单个位置(顶级Actor)处理数据库的初始化和清理,并允许您通过创建更多Actors来处理请求并监督它们以正确处理错误,从而在内部(如果需要)进行扩展。

作为旁注,在这种情况下可能有很多现有技术,所以我建议对其他人如何处理它进行一些研究。您还应该看到数据库驱动程序本身如何处理线程,因为您可能只是构建了大量的意外复杂性