我每天都有一份工作。 在这些时间之间,消息被隐藏起来。
如果服务器需要重启,您如何处理此存储?也许藏匿不是应该使用的东西?
答案 0 :(得分:0)
答案可能取决于您的使用案例。如果您主要关注受控关闭,那么您可以在关闭之前向actor发送消息,要么提前处理存储的消息,要么将它们保存到临时存储中,直到actor重新启动。
如果演员系统崩溃,这对你没什么好处。为防止这种情况发生,您只需将消息保存到数据库,文本文件或您选择的其他存储机制,而不是使用Stash。创建一个子actor(下面的“存储actor”)来为你处理IO(因为这是一个潜在的危险操作)。
父演员(至少)有两种状态:Listening
和Processing
。在Listening
时,它会将任何到达存储参与者的消息发送到存储库中。当你的工作运行时,演员Become()
s Processing
。
当父actor的状态更改为Processing
时,父级会向存储参与者发送消息,并请求将所有存储的消息发回。适当地接收和处理这些。当存储参与者发送了它拥有的所有消息时,它会发送Complete
消息。然后父母演员再次Become()
的{{1}},并且循环重新开始。
在其他情况下,您可能想要使用Akka.Persistence。这里的主题太大了,但你可以在这里找到做出明智决定所需的信息:http://bartoszsypytkowski.com/how-akka-net-persistence-works/
我要考虑的另一件事是这个过程是否真的需要批处理。消息系统中存在一些有效的批处理用例,尤其是在与其他基于非消息的系统连接时,但如果在actor系统内部使用它,我的第一个操作是查看该进程是否可以实时完成。 / p>