我想创建可以从文件系统提供资源的参与者。理想情况下 [1] 我希望每个目录和每个文件都有一个演员。但我不想创建整个演员树层次结构,因为我想尽可能地节省内存和资源。
据我了解,只有在其父级存在时才能创建演员。懒惰地创建这些层次结构的最佳方法是什么。是否有一个钩子可以用来捕捉失败并动态创建参与者层次结构,并且有效地做到这一点?
有了这个,我就可以向演员发送fetch
, update
, delete
, ... 消息,而 akka 演员系统将因此处理同步问题。然后可以通过虚拟文件等概念将其扩展到更复杂的参与者行为......
我能想到的一些可能的解决方案:
- 运行
context.actorFor(path)
,如果它返回死信邮箱,则尝试创建参与者层次结构。这听起来不是一个好的解决方案。 getOrCreateChild
将消息发送给根actor,并通过某种方法将其转发给它的子actor 。但这可能效率低下吗?(或者这就是akka本身在引擎盖下所做的事情......(我应该看看))- 根本不这样做,只需创建一个actor,将每条消息委托给为所请求文件的每个目录动态创建的目录actor,如堆栈溢出问题“on demand actor get or else create”的答案中所述。这对于捕获目录删除语义不是很好。(会不会更有效率?)
[1] 我不确定这是否理想,但我认为我应该先尝试这种方法。另一种方法是为每个目录创建一个参与者并将其存储在哈希映射中。