如何使用ConsistentHashmapping在运行时添加参与者以在akka.net中分组或池?
问题描述:
我想添加和删除角色到池(组?),应该通过使用一致的哈希映射(消息具有与实体路径一致的ID)接收消息的消息。 但创建池后,只有IActorRef返回,我不知道如何“告诉”有关新演员添加。如何使用ConsistentHashmapping在运行时添加参与者以在akka.net中分组或池?
我已阅读了关于路由的几个教程和提示,例如:https://github.com/petabridge/akka-bootcamp/tree/master/src/Unit-3/lesson2 但这些不适合。
也许我需要写一个自己的路由器,这些消息我自己?
答
有所述Akka.Routing包,其允许添加和删除新routees内的预定消息。你可以在Akka.net here找到代码行。例如,下面的代码将一个IActorRef到现有的路由器(我ConsistentHashingGroup测试此):
var routee = Routee.FromActorRef(actor);
router.Tell(new AddRoutee(routee));
一点点讨厌,我不得不通过源代码抓取找到办法如何做到这一点,因为它是不是PetBridge训练营的一部分(或者我忽视了它?),我没有在其他地方找到答案,即使我认为这是一个非常典型和常见的场景。这个文档在这个领域有点不成熟。
希望这可以帮助别人出有安全使用寿命的几分钟,做上有所软件的领域更加有趣与Akka.net开发搜索如何使用这个框架来代替。 ;-)
一般加入的演员在运行时一致性哈希路由器是强烈反对的,除非你真的知道自己在做什么。当你添加/删除演员到一致的散列环时,散列的范围,每个现有演员负责,将会改变。这意味着之前由演员处理的一些消息现在将由另一个处理。 – Horusiath
这是为什么?如果使用一个组,这只是消息如何指向处理角色的一种不同方式。我可以直接与演员对话或使用演员选择(基于身份)。路由只是寻找演员标准的策略。你能举出这样的问题的例子吗?我想管理一个实体列表而不依赖于消息内容。 – Beachwalker
...我可以使用一个特定的Manager actor将所有收到的消息转发到相应的IActorRef,基于字典中的Id而不是actor选择。 – Beachwalker