为什么在使用ConsistentHashingPool时出现重复的键错误?

时间:2020-06-26 20:43:12

标签: akka.net

根据docs,可以通过将一个简单的lambda传递给像这样的池来指定要用于一致哈希池的密钥

var props = Context.DI().Props<ProcessUserSessionActor>()
                .WithRouter(new ConsistentHashingPool(10000)
                    .WithHashMapping(b => ((ProcessUserSession)b).UserId.ToString())); //<==== this line

但是,当第一条消息通过我的系统通过时,我收到了这样的错误

由于[已添加具有相同密钥的项目,因此无法路由具有一致的哈希密钥[882f862b-a502-4289-b1f1-fca9a9e1f3c8]的邮件。密钥:[2135871908,akka:// TradeProcessingSystem / user / $ a / $ a / $ a / $ Drc]]

为了获得更好的画面,这是所有相关代码

var props = Context.DI().Props<ProcessUserSessionActor>()
                .WithRouter(new ConsistentHashingPool(10000)
                    .WithHashMapping(b => ((ProcessUserSession)b).UserId.ToString()));

            Receive<ProcessUserSession>(a =>
            {
                var userSessionProcessor = Context.ActorOf(props);
                userSessionProcessor.Tell(a); //<=== breaks on this line
            });

我什至尝试从ProcessUserSession派生我的命令IConsistentHashable,但仍然遇到相同的错误。我猜我不知道有什么事情在做。我的DI设置中已将所有参与者注册为Transient,因此,似乎在Context.ActorOf上如何创建该参与者,而在userSessionProcess.Tell上又如何再次创建,因为路由器应该没有上下文在消息实际到达处理程序之前如何创建路由器。

是否有人在使用DI创建过ConsistentHashable角色方面有过经验,并且在此之前制定了路由策略可以帮助指出我的错误?

0 个答案:

没有答案