是否可以强制ConsistentHashingPool为每个哈希创建路由?我希望一个 routee 演员只处理相同哈希的消息。如果有新的哈希进来,就会创建新的 routee。
我试着去Resizer
上课,但我无法弄清楚实现我想要的东西的方法。
是否可以强制ConsistentHashingPool为每个哈希创建路由?我希望一个 routee 演员只处理相同哈希的消息。如果有新的哈希进来,就会创建新的 routee。
我试着去Resizer
上课,但我无法弄清楚实现我想要的东西的方法。
我认为您对ConsistentHashRouter (CHR)有点误解。它已经完成了您所说的 - 始终将密钥落在给定哈希范围内的消息路由到相同的路由。
当新节点/虚拟节点加入集群时,路由被添加到 CHR 路由表中/从中删除。然后,哈希范围将重新平衡以考虑集群中的新节点,并且 CHR 会将消息路由到现在负责密钥所属哈希范围部分的节点。这可能是之前负责它的同一节点,或者它可能从一个节点转移到另一个节点。本质上,您是在整个集群中对哈希范围进行分片。
更新:截至撰写本文时(2015 年 10 月),此管理过程必须手动完成。有一个名为 Akka.Cluster.Sharding 的模块会为您跨节点重新平衡分片。它目前在 JVM 上可用。
(从新手的角度来看……)我同意 Oliver 的观点,这是一个太简单的用例,不需要所谓的集群和分片。
考虑一个为用户或会话或其他东西持有某种状态的参与者 - 显然每个参与者必须只接收该实体实例 ID 的消息。
通过阅读一些文档,我很确定自己编写代码很简单:您只需编写一个父actor,它检查给定id的子代是否存在,如果不存在则创建它,然后将消息路由到它。
我还希望在 ConsistentHashingRouter 上有一个类似于 create-unique-actors 设置的东西,可以自动为您执行此操作。(也许它通常没有用,因为您需要考虑何时以及如何终止演员以防止他们永远活着?)