如何将HashMap从一个Actor传递到另一个Actor

时间:2017-06-04 00:55:15

标签: akka concurrent.futures

我有一个方法getAggOutput(),它在Actor A中返回一个HashMap。

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

此外,在Actor A中,在case对象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)

print语句显示rMap的值是正确的,但是,我收到以下错误:

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

结果未分配HashMap的值。

如何使这项工作?或者,有更好的方法吗?我只需要让rMap进入Actor B

更新:

我想出了这一部分。在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)

更新:

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)

1 个答案:

答案 0 :(得分:0)

没有必要这样做,我只是在Actor A中循环Hashmap并将每个(key,value)对发送给Actor B