Akka actor 从数据库读取状态
Akka actor read state from database
当需要从数据库初始化 actor 状态时,我想询问模式。我有一个 DAO,其中 return Future[...] 并且通常是非阻塞消息应该在未来完成时发送给 actor。但本案不同。在初始化完成之前,我无法从演员邮箱收到任何消息。等待数据库未来完成时阻塞 actor 线程的唯一方法是什么?
最简单的方法是定义两个接收方法,例如initializing
和 initialized
,从 def receive = initializing
开始。在您的 inizializing
上下文中,您可以简单地发回 InitializationNotReady
之类的消息,告诉其他演员他应该稍后再试一次。在您的 actor 初始化后,您可以使用 context become initialized
将您的上下文切换到新状态,您可以在其中正常操作。
毕竟,另一个好的方法可能是看看 Akka Persistence。它使有状态的 actor 能够保留其内部状态,以便在 actor 启动时恢复,在 JVM 崩溃后或由主管重新启动,或在集群中迁移。
在你的情况下,你可以从数据库恢复你的状态,因为它们是 Akka 持久化的多个存储选项。你可以找到它们 here。恢复后,您可以像往常一样接收消息。
当需要从数据库初始化 actor 状态时,我想询问模式。我有一个 DAO,其中 return Future[...] 并且通常是非阻塞消息应该在未来完成时发送给 actor。但本案不同。在初始化完成之前,我无法从演员邮箱收到任何消息。等待数据库未来完成时阻塞 actor 线程的唯一方法是什么?
最简单的方法是定义两个接收方法,例如initializing
和 initialized
,从 def receive = initializing
开始。在您的 inizializing
上下文中,您可以简单地发回 InitializationNotReady
之类的消息,告诉其他演员他应该稍后再试一次。在您的 actor 初始化后,您可以使用 context become initialized
将您的上下文切换到新状态,您可以在其中正常操作。
毕竟,另一个好的方法可能是看看 Akka Persistence。它使有状态的 actor 能够保留其内部状态,以便在 actor 启动时恢复,在 JVM 崩溃后或由主管重新启动,或在集群中迁移。
在你的情况下,你可以从数据库恢复你的状态,因为它们是 Akka 持久化的多个存储选项。你可以找到它们 here。恢复后,您可以像往常一样接收消息。