scala - 无法获取 Akka future 值 Akka 1.3-RC2

标签 scala akka

我是 Akka 新手,正在制作几个测试文件来练习 Akka 概念。下面的测试看起来很简单,但无论出于何种原因,如果我从 Actor 那里收到 future ,我都无法获得 future 的值。我的所有假设都基于 akka 文档 ( http://akka.io/docs/akka/1.3-RC2/scala/futures.html#futures-scala ) 中的几个示例,例如:

这就像一个向导:

val f = Future{ 1 + 4 }

f onComplete
{
  _.value.get.fold(
    v => throw new Exception("My Exception"),
    println(_)
  )
}

这不会:

class FutureDemo extends Actor
{
  def receive =
  {
    case (a: Int, b: Int) =>
      a + b
  }
}

val fa1 = actorOf[FutureDemo].start()

val future = fa1 ? (1, 2)

future onComplete
{
  _.value.get.fold(
    v => throw new Exception("My Exception"),
    println(_)
  )
}

我很高兴知道由于 future 的极端简单性,我是唯一一个遇到过这个问题的人(我很幸运)。有人能帮助我了解这个非常明显的问题吗?

我应该注意到,我曾尝试在另一个参与者内部以及一个简单的 main 方法中进行处理。每一个都以同样令人敬畏的方式失败,其中没有任何通知。如果将 onComplete 替换为简单的 println(future.get) ,我最终会得到一个超时异常(线程“main”akka.dispatch.FutureTimeoutException 中的异常:Futures 在 [4996] 毫秒后超时)。我还应该指出,我也尝试过使用 akka 的 1.1 和 1.2 发布版本。

谢谢!

最佳答案

这确实是你忽略的一个小细节:你的 Actor 没有回复!我可以提出以下建议:

class FutureDemo extends Actor {
  def receive = {
    case (a: Int, b: Int) => self.reply(a + b)
  }
}

关于scala - 无法获取 Akka future 值 Akka 1.3-RC2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8452449/

相关文章:

Scala 中存在类型的泛型

scala - 双@输入类型

scala - 使用 Akka Streams 动态压缩 List[Source[ByteString, NotUsed]]

mysql - Lagom 与 MySQL Db 连接

java - 记录游戏框架之外的类

scala - clojure在scala中迭代等效?

java - 为什么我在增强 ebean scala 实体时收到 java.lang.VerifyError

docker - docker 中的 akka 节点显式解除关联

java - 在 Akka 中记录收到的消息

scala - 为什么 Scala 编译器失败并显示 "no ' : _ *' annotation allowed here" when Row does accept varargs?