Akka启动并访问actor返回的数据

时间:2015-04-07 11:22:51

标签: java akka

我是演员MainActor,它初始化并发送另外两个子消息,并期望得到一个结果。因此MainActor有两个儿童演员SubActorASubActorB

基本上我想在来自子actor的数据到达时构建一个模型我可以在更高级别的某个地方访问它(初始化MainActor的类)

例如,我有两个任务100毫秒。如果SubActorA已在70毫秒内返回数据但SubActorB需要更多时间,则会有30毫秒更多时间,并且所有任务都将被放弃,但我仍然对数据感兴趣并希望能够访问它即使某些子任务有时间。

问题:

  1. 如何限制整个执行时间为100毫秒,以便将来能够从每个演员中部分访问数据?

  2. 如何从最高级别的actor访问数据?我不能一直从UntypedActor延伸并将消息发送到更高级别,一次又一次地将数据推送到更高级别。我试图创建一个WrapperHandler来初始化MainActor,但遗憾的是获得异常You have to use one of the 'actorOf' factory methods to create a new actor.当然我可以使用actorOf方法执行此操作并调用.tell()方法向开始所有工作的actor发送消息。但是,如果我不再延长UntypedActor而不是覆盖onRecieve()方法,我该怎么回复?

  3. 感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

Akka中的所有内容都基于消息传递。如果你想从一个演员那里获取数据,你要求它(发送一条消息),演员将(可能)回复(发送另一条消息)。

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

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