2017-06-04 69 views
0

我有一個方法getAggOutput()返回一個HashMap,在演員A.如何從一個演員傳遞HashMap來另一個

def getAggOutput: HashMap[X, List[Y]] = { 
    println("***** Inside getAggOutput, rMap is: " + rMap) 
    return rMap 
} 

另外,在演員A,該方法被稱爲該下的情況下對象GETOUTPUT:

case GETOUTPUT => 
    println("***** Inside GETOUTPUT") 
    getAggOutput 

在演員B,我做了以下內容:

implicit val timeout = Timeout(5 seconds) 
val reducerInput = sender ? GETOUTPUT 
val result = Await.result(reducerInput, timeout.duration) 
println("****** RESULT is: " + result) 

打印報表顯示,該VALU e for rMap是正確的,但是,我收到以下錯誤:

java.util.concurrent.TimeoutException: Futures timed out after [5 seconds] 

而結果未分配HashMap的值。

我該如何做這項工作?或者,完全有更好的方法嗎?我只需要得到RMAP到演員乙

UPDATE:

我想通了這部分內容。在GETOUTPUT的情況下,我需要:

sender ! getAggOutput. 

println顯示結果變量中的HashMap是正確的。現在

,我想遍歷HashMap中:

for((key,value) <- result) 
    { 
     redOut += (key -> value) 
    } 

而且我收到以下錯誤:

type mismatch; 
[error] found : (Any, Any) 
[error] required: (X, U) 
[error]   redOut += (key -> value) 

UPDATE:

I also tried: 

for((key,value) <- result) 
    { 
     redOut += (key.asInstanceOf[X] -> value.asInstanceOf[U]) 
    } 

不過,我收到出現以下錯誤:

value withFilter is not a member of Any 
[error]   for((key,value) <- result) 
+0

我看你已經解決了,但要補充的:避免在演員之間發送可變狀態是不安全的,並且從不在演員中使用Await.result - 在Akka文檔中閱讀ask和pipeTo以查看替代方案。 – johanandren

回答

0

有沒有必要做這個,我只是環繞在HashMap中的演員A和發送的每個(鍵,值)對到演員乙

相關問題