Akka演员从数据库读取状态

时间:2016-08-06 12:01:53

标签: akka actor nonblocking

当需要从数据库初始化actor状态时,我想询问模式。我有一个DAO,它返回Future [...]并且通常是非阻塞消息,应该在将来完成后发送给actor。但这种情况不同。在初始化完成之前,我无法从actor邮箱收到任何消息。是等待数据库未来完成时阻止actor线程的唯一方法吗?

1 个答案:

答案 0 :(得分:4)

最简单的方法是定义两种接收方法,例如: initializinginitialized,以def receive = initializing开头。在inizializing上下文中,您可以简单地发送回InitializationNotReady之类的消息,告诉其他演员他应该稍后再试一次。初始化actor之后,将您的上下文切换为context become initialized到新状态,在那里您可以正常运行。

毕竟,另一个好的方法可能是Akka Persistence。它允许有状态的actor保持其内部状态,以便在一个actor启动,在JVM崩溃后重新启动或者由一个主管重新启动,或者在一个集群中迁移时恢复它。

在这种情况下,您可以从数据库恢复状态,因为它们是Akka持久性的多个存储选项。你可以找到它们here。恢复之后,您可以收到类似您已经习惯的消息。