解决演员的正确方法是什么?

时间:2016-10-18 18:58:52

标签: c# akka akka.net

我有1000个订单,我想为每个唯一的orderid创建一个actor。什么是安全地创建这些演员的最佳方式,同时保证每个唯一的orderid只有一个?

我试图首先使用ActorSelection,然后如果我找不到具有该id的actor,我使用ActorOf创建一个新的,但是当开始批量生成时,我会得到很多ActorNotFoundException,当然后我尝试使用ActorOf它失败了InvalidActorNameException。

示例:

doubleTapped

1 个答案:

答案 0 :(得分:3)

你应该使用Entity Per Child Pattern,即拥有一个每个实体ID产生子actor的actor。您可以在World Crawler示例中查看example

简而言之,它看起来应该是这样的:

var child = Context.Child(entityId.ToString());

if (child == ActorRefs.Nobody)
    child = Context.ActorOf(...); // spawn child actor here

child.Tell(message);

最好在子actor上设置ReceiveTimeout,以便在闲置一段时间后将其终止。