阿卡和坚持

时间:2017-03-21 17:36:34

标签: akka akka-persistence

我在宠物项目中使用Akka.Net。我已经听过很多关于演员模特的消息,最后有机会玩它。我首先感到惊讶的是,持久性不是一个基本功能,它是一种"插件"。现在我遇到了我不明白的情况。让我们说我有一个API,所有外部命令都被路由到Supervisor actor。在处理这些命令时,这个actor创建子actor并将命令路由到它们。这是我从书本中学到的方式。现在让我们说Supervisor创建给孩子:A和B,他们彼此有ActorRef。我想使用Context.SetReceiveTimeout来释放“空闲”所占用的内存。演员,因为我总共可能有数百万。所以,想象一下演员B决定是时候去钝化'或从内存中删除自己。我使用的是Akka.Persistence,因此所有内容都以消息(事件)或快照的形式存储在某处。因此,演员可以通过PoisonPill杀死自己。问题在于,在演员的生命周期中,没有像“从记忆中移除”这样的状态。所以从Supervisor的角度来看,现在它只有一个孩子,演员A.如果演员A通过拥有的ActorRef向演员B发送消息,它就无处可去。

当我尝试优雅地重启我的服务时,我第一次遇到这种情况。我发现重启后Supervisor演员对它的孩子A和B一无所知。但如果它试图重新创建它们,那么它们才会从存储中恢复,因为PersistenceId保持不变。

请帮助我理解我做错了什么。正如我之前所说,对我而言,从第0天看,持久性并不是意味着。如果我设计的是Actor框架,我认为隐藏演员存在与内存之间的差异是框架的责任。演员存在,但交换到存储。它与虚拟内存的页面错误非常相似!

0 个答案:

没有答案