2015-04-07 45 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'收到當前消息(它想要在演員之外轉發)會產生一個無限循環? –