我正在考虑构建一个系统,该系统使用当前返回的查询中的信息为用户预取查询(用户向DB查询userId,返回用户所在的电话呼叫列表。我想要预先获取电话呼叫的查询(例如记录的电话呼叫的日期,持续时间和位置)。用户可能永远不会查询这些内容,但他们通常会这样做。
目前,每个查询都需要大约10秒钟(代码中需要进行一些优化,但最大的瓶颈是数据库,而且不在我的手中)。
所以,我想与演员进行预取。我最终会找到一种让演员在x时间不使用的情况下自杀的方法,但首先我想找一个方法来看看我演的是哪些演员。
在Akka.NET中有没有办法做到这一点?
答案 0 :(得分:2)
如何对此进行建模是通过让父actor处理某组prefetchingActor来实现的。另外,你有一个管理所有预取的Actor,或者多个管理一组特殊预取器的管理器取决于你。
但关键是你最终会得到一个定义明确的顶级演员,你可以发一条消息询问它有多少活跃的预取者。
更新
您可以使用ActorSelection和通配符向多个actor发送消息。
关于处理超时。我会使用钝化模式。子actor可以使用ReceiveTimeout
方法监视自己的活动,并在检测到其闲置x个时间后向其父级发送钝化消息。
一旦父接收到钝化消息,它将停止将消息路由到子节点,而是缓冲它们。并阻止演员。一旦确认了actor终止,它将检查该actor是否有任何新消息,如果是,则重新创建actor并将消息从其缓冲区刷新到它。