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