我有很大的内存对象,我只是想知道,如果我可以创建一个ConsistentHashing路由器并且能够将负载拆分为下层角色。 主要问题是我需要在创建后使用数据来摄取actor,所以只是想知道如何实现这一点。 主对象具有大量记录,将按Id字段分组。
这是我的想法:
创建actor时 - 我可以从hashPool中获取主对象所需的ID吗?
当创建actor时,我可以包装摄取消息ConsistentHashableEnvelope,然后在使用相同的换行进行排队时请求数据 - 这会有效吗?
答案 0 :(得分:2)
根据您对问题的评论,我更了解您要做的事情。
我做了类似的事情,但是演员必须启动的方式略有不同:一个缓存系统,我在ConsistentHashableEnvelope
中使用用户的ID将请求路由到应该发送的演员用户的请求。如果用户的数据不可用,则会将其从第三方服务加载到内存中。以下所有请求都将在内存中对此数据进行操作。
在你的情况下,我会以这种方式解决问题:
ConsistentHashing
路由器,其中的演员可以在Receive<>
所需的各个条目的状态下启动。Tell()
路由器要使用ConsistentHashableEnvelope
作为包装器将此大对象中的所有单个条目切片,路由器将每个条目发送到正确的目的地。Receive<>
条目并使用某种方法将接收的数据合并到现有的内部结构中。这意味着当演员第一次启动时,它将只是存储切片,如果它稍后收到条目,你可以决定做什么(替换,更新,无论你想要什么)。ConsistentHashableEnvelope
,否则消息将被路由到没有数据<!/ LI>
从你的帖子我不太了解你的其他项目需求,但是如果你需要能够在处理依赖于这些数据的其他请求之前首先用他们的切片填充actor,你可能想要开始AwaitingData
状态的路由使用Become()
,然后在收到数据后将其移至Ready
状态。
如果您添加有关项目的更多信息,我可以为您提供更多帮助。