作为开始和访问参与者返回数据

Akka start and access actors returned data

我有 actor MainActor,它为另外两个 sub 初始化和发送消息,并期望得到返回结果。所以 MainActor 有两个儿童演员 SubActorASubActorB

基本上我想在来自子角色的数据到达时构建一个模型,我将能够在更高级别的某个地方访问它(class 已初始化 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() 方法来做到这一点向开始所有工作的演员发送消息。但是,如果我不再扩展 UntypedActor 并且不再覆盖 onRecieve() 方法,我该如何获得响应?

感谢您的帮助!

Akka 中的一切都基于消息传递。如果您想从演员那里获取数据,您可以请求它(发送一条消息),演员将(可能)回复(发送另一条消息)。

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

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