2015-04-07 42 views
1

我已经演员MainActor初始化和发送两个其他子的消息,并期待返回结果。所以MainActor有两个小孩演员SubActorASubActorBAkka开始和访问演员返回的数据

基本上我想建立一个模型时,从子参与者的数据已经到达我将能够在某个地方访问它在更高的层次(类初始化MainActor

比如我有两个任务100毫秒。如果SubActorA已经在70毫秒内返回了数据,但SubActorB需要更多时间,那么它将会有30毫秒多的时间,毕竟任务将被放弃,但我仍然对数据感兴趣,并希望即使某些子任务具有访问权限时间喝。

问题:

  1. 我如何限制在100 ms整个执行,以便在将来,我将能够从每个演员部分访问数据吗?

  2. 如何从最高级别的角色访问数据?我无法一直将数据从UntypedActor延伸到更高级别,并将消息发送到更高级别。我试图创建一个WrapperHandler,它将初始化MainActor,但不幸的是得到异常You have to use one of the 'actorOf' factory methods to create a new actor.当然,我可以使用actorOf方法来执行此操作,并调用.tell()方法向启动所有作业的actor发送消息。但是,如果我不扩展UntypedActor而不是覆盖onRecieve()方法,我如何获得回复?

感谢您的帮助!

回答

2

阿卡的一切都基于消息传递。如果你想从演员那里得到数据,你可以要求它(发送消息),演员将会(也许)回复(发送另一条消息)。

幸运的是,Akka提供了一个名为ask的帮助程序,它允许您从演员外部发送消息并以Future的形式接收答复。您可以通过提问助手从您的演员层次结构外部(或您实例化的任何地方MainActor)向您的MainActor发送消息,MainActor将回复您的数据。

http://doc.akka.io/docs/akka/2.3.9/java/untyped-actors.html#Ask__Send-And-Receive-Future

+0

非常感谢!我的MainActor应该回复谁?我试着回复'getContext()。parent()。tell(message,getSelf());'但它失败并且超时。你知道可能的原因吗? –

+0

你必须回复发件人。 – Ryan

+0

但是由于'MainActor'在我理解的发件人引用中从'SubActorA'收到当前消息(它想要在演员之外转发)会产生一个无限循环? –