Akka actor 从数据库读取状态

Akka actor read state from database

当需要从数据库初始化 actor 状态时,我想询问模式。我有一个 DAO,其中 return Future[...] 并且通常是非阻塞消息应该在未来完成时发送给 actor。但本案不同。在初始化完成之前,我无法从演员邮箱收到任何消息。等待数据库未来完成时阻塞 actor 线程的唯一方法是什么?

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

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

在你的情况下,你可以从数据库恢复你的状态,因为它们是 Akka 持久化的多个存储选项。你可以找到它们 here。恢复后,您可以像往常一样接收消息。