Routing 创建每个域对象的参与者

Routing 创建每个域对象的参与者,routing,akka.net,Routing,Akka.net,我一直在尝试使用带有ConsistentHashingPool的路由器来动态创建参与者,以便根据对象id(在这个简单的例子中是唯一的字符串)使用消息 我希望每个域聚合一个参与者,这似乎是一个非常简单的方法 但是散列似乎在做一些奇怪的事情,并将消息发送给已经从不同散列映射值派生出来的参与者 ActorSystem.ActorOf( Props.Create(() => new MyAggergateActor()).WithRouter( new Consistent

我一直在尝试使用带有
ConsistentHashingPool
的路由器来动态创建参与者,以便根据对象id(在这个简单的例子中是唯一的字符串)使用消息

我希望每个域聚合一个参与者,这似乎是一个非常简单的方法

但是散列似乎在做一些奇怪的事情,并将消息发送给已经从不同散列映射值派生出来的参与者

ActorSystem.ActorOf(
    Props.Create(() => new MyAggergateActor()).WithRouter(
        new ConsistentHashingPool(10)
        .WithHashMapping(o => (o as MyEvent)?.MyAggregateUniqueId ?? string.Empty)
        .WithResizer(new DefaultResizer(1, int.MaxValue))), 
    "myAggregateRouter");
另外,调整
nrofinances
中的值似乎也会破坏一些东西,这意味着散列可能只在初始实例集中起作用,并且不会产生新的参与者?我还以为重调器会帮我呢


请原谅我的幼稚,我才刚刚开始使用Akka。

这里的关键是了解路由器真正的功能。一致散列意味着,给定所有可能的一致散列值的范围,路由器池中的每个参与者负责从总可能性范围处理散列范围

例如:如果您的一致散列可以是可能范围为1-100的值之一,那么具有10个参与者池的一致散列路由器将把散列范围为1-10的消息委托给第一个参与者,11-20委托给第二个参与者,依此类推。。。一旦您调整池的大小,这些散列范围将被重新调整到池中的每个参与者-因此在本例中,在将池大小调整到20个参与者之后,第一个参与者现在将服务于1-5、第二个参与者6-10等范围


如果您想动态创建参与者,并根据某个实体ID将消息发送给他们,我相信您要寻找的是。

我认为akka.cluster和sharding对于我的应用程序来说完全是过火了。也。然而,我想我是想通过用一个圆形的钉子打一个方形的洞来表现自己的聪明。现在我对路由器有了更好的了解(谢谢你的回复),我意识到了我的错误。我现在只是使用一个参与者来管理实例,并将消息转发到正确的实例。