我有1000个订单,我想为每个唯一的orderid创建一个actor。什么是安全地创建这些演员的最佳方式,同时保证每个唯一的orderid只有一个?
我试图首先使用ActorSelection,然后如果我找不到具有该id的actor,我使用ActorOf创建一个新的,但是当开始批量生成时,我会得到很多ActorNotFoundException,当然后我尝试使用ActorOf它失败了InvalidActorNameException。
示例:
doubleTapped
答案 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,以便在闲置一段时间后将其终止。