Akka 超时的角色和传递给wait.result的时间
我在127.0.0.1:2552上运行akka演员服务 我正在尝试从客户端访问它,如下所示: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
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呢?它隐式地传递给发送请求。