2017-06-04 37 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和发送的每个(键,值)对到演员乙

相关问题