正在创建每个域对象的参与者



我一直在尝试使用带有ConsistentHashingPool的路由器来创建动态参与者,以在对象id的基础上消费消息,在这种简单的情况下,对象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");

此外,从nrOfInstances中调整值似乎也会打破局面,这意味着哈希可能只在一组初始实例中起作用,并且没有产生新的参与者?我以为整形医生应该在这里帮我?

请原谅我的天真,我才刚刚开始使用阿卡。

这里的关键是了解路由器真正的作用。一致哈希意味着,在给定所有可能的一致哈希值的范围内,路由器池中的每个参与者都负责处理总可能性范围内的哈希范围

例如:如果您的一致性哈希可以是1-100的可能范围中的一个值,则具有10个参与者池的一致性散列路由器将使用1-10到第一个参与者、11-20到第二个参与者的哈希委托消息,依此类推…一旦您调整池的大小,这些哈希范围将重新调整到池中的每个参与者-因此在这种情况下,在将池的大小调整为20个参与者之后,第一个将提供1-5,第二个6-10等范围的

如果你想创建动态参与者,并根据某个实体ID将消息路由到他们,我相信你正在寻找的是Akka.Cluster.Sharding.

最新更新