Akka 超时的角色和传递给wait.result的时间

Akka 超时的角色和传递给wait.result的时间,akka,Akka,我在127.0.0.1:2552上运行akka演员服务 我正在尝试从客户端访问它,如下所示: val client = new SClient("127.0.0.1:2552") describe("akkaDbClient") { it("should set a value"){ client.set("123", new Integer(123)) val futureResult = client.get("123") val result = Await.result(fu

我在127.0.0.1:2552上运行akka演员服务

我正在尝试从客户端访问它,如下所示:

val client = new SClient("127.0.0.1:2552")
describe("akkaDbClient") {
it("should set a value"){
  client.set("123", new Integer(123))
  val futureResult = client.get("123")
  val result = Await.result(futureResult, 10 seconds)
  result should equal(123)
 }
}

class SClient(remoteAddress: String){
private implicit val timeout = Timeout(2000)
private implicit val system = ActorSystem("LocalSystem")
private val remoteDb = 
   system.actorSelection(s"akka.tcp://akkadb@$remoteAddress/user/akka-db")

def set(key: String, value: Object) = {
 remoteDb ? SetRequest(key, value)
}

def get(key: String) = {
  remoteDb ? GetRequest(key)
 }
}
我无法理解传递给wait.result()的超时和时间参数的作用

这些值表示什么,以及它们如何影响程序?

Future在后台执行,而不是在主线程上执行。如果计算量很大,可能需要很长时间。或者更糟糕的是,如果有一个无限循环,未来永远不会回来

在你等待它完成之前,这不是一个问题(从实用意义上讲)。它会像普通的无限循环一样阻止执行。因此,您可以指定等待结果的超时时间,直到结果使用
TimeoutException
停止

如果
client.get(123)
花费的时间超过10秒,则会出现异常,测试将失败。否则,它将永远不会返回并运行,直到您手动终止该进程

关于第二次暂停:你要求你的演员有一个可能的回答。这也可能超时

在您的特定示例中,如果参与者花费的时间超过两秒,则会发生超时。但是,如果您例如映射、FlatMapping、筛选future并返回它,这些操作将在10秒后超时

implicit val timeout=timeout(2000)
val f1=演员?消息//超时2秒
val f2=f1地图长运行操作
wait.result(f2,10秒)//超时10秒
Future在后台执行,而不是在主线程上执行。如果计算量很大,可能需要很长时间。或者更糟糕的是,如果有一个无限循环,未来永远不会回来

在你等待它完成之前,这不是一个问题(从实用意义上讲)。它会像普通的无限循环一样阻止执行。因此,您可以指定等待结果的超时时间,直到结果使用
TimeoutException
停止

如果
client.get(123)
花费的时间超过10秒,则会出现异常,测试将失败。否则,它将永远不会返回并运行,直到您手动终止该进程

关于第二次暂停:你要求你的演员有一个可能的回答。这也可能超时

在您的特定示例中,如果参与者花费的时间超过两秒,则会发生超时。但是,如果您例如映射、FlatMapping、筛选future并返回它,这些操作将在10秒后超时

implicit val timeout=timeout(2000)
val f1=演员?消息//超时2秒
val f2=f1地图长运行操作
wait.result(f2,10秒)//超时10秒

我的代码中有两个时间值。2000和10年。正如你所说,10是计算未来的等待期。那么值2000呢?它隐式地传递给发送请求。我的代码中有两个时间值。2000和10年。正如你所说,10是计算未来的等待期。那么值2000呢?它隐式地传递给发送请求。