我是演员MainActor
,它初始化并发送另外两个子消息,并期望得到一个结果。因此MainActor
有两个儿童演员SubActorA
和SubActorB
。
基本上我想在来自子actor的数据到达时构建一个模型我可以在更高级别的某个地方访问它(初始化MainActor
的类)
例如,我有两个任务100毫秒。如果SubActorA
已在70毫秒内返回数据但SubActorB
需要更多时间,则会有30毫秒更多时间,并且所有任务都将被放弃,但我仍然对数据感兴趣并希望能够访问它即使某些子任务有时间。
问题:
如何限制整个执行时间为100毫秒,以便将来能够从每个演员中部分访问数据?
如何从最高级别的actor访问数据?我不能一直从UntypedActor
延伸并将消息发送到更高级别,一次又一次地将数据推送到更高级别。我试图创建一个WrapperHandler
来初始化MainActor
,但遗憾的是获得异常You have to use one of the 'actorOf' factory methods to create a new actor.
当然我可以使用actorOf
方法执行此操作并调用.tell()
方法向开始所有工作的actor发送消息。但是,如果我不再延长UntypedActor
而不是覆盖onRecieve()
方法,我该怎么回复?
感谢您的帮助!
答案 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