我怎样才能保证一个合并的AKKA演员只能从它自己的儿童演员那里收发?

时间:2016-03-23 15:16:53

标签: java akka pool

我在游泳池中有几个演员。我希望每个演员都能创造儿童演员。问题是,当我创建子actor并保存引用时,我永远不知道哪个孩子将获得池化的actor发送给它的消息。该池创建为smallestMailBox池。 在汇集的演员的构造函数中我做了:

documentReaderActor = this.getContext().actorOf(Props.create(DocumentReaderActor.class ));

这是它的孩子。 我做了一些pattern.asks和一些讲述,但他们不会在同一个孩子身上。 首先,我做了一个:

documentReaderActor.tell(startReading, getSelf());

后来我一遍又一遍地做:

     Future<Object> future = Patterns.ask(documentReaderActor, adSend,
                timeout);
     adReceive = (AkkaDocument) Await.result(future, timeout.duration());

(adReceive和adSend是一个AkkaDocument类对象)

当我完成后,我发送:

documentReaderActor.tell(documentDone, getSelf());

所以我有10个这些合并的演员各自创造一个儿童演员,但这些消息不会每次都转到同一个孩子身上。我怎样才能保证这位合并的演员只与他们的孩子交谈?

1 个答案:

答案 0 :(得分:0)

Akka的SmallestMailBox路由器的工作方式是它会根据显示的顺序将发送到其ActorRef的任何消息重定向到其中一条路由:

  • 选择空邮箱
  • 的任何空闲routee(不处理邮件)
  • 选择任何空邮箱
  • 选择邮箱中包含最少待处理邮件的邮件
  • 选择任何远程routee,远程actor被认为是最低优先级, 因为他们的邮箱大小未知

从您的角度来看,这意味着您无法保证对您的某个Asks的响应最终会出现在创建它的同一个角色上。

如果您想使用游泳池,可能需要推出自己的Custom Router