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