如何 return 来自调度程序的值
How to return value from scheduler
我想在 akka http 服务器中定期更新一个值(稍后使用),我找到的唯一方法是使用调度程序,但我无法 return 从中获取一个值。
我尝试过使用 akka 调度程序,我也许应该使用 Future,但不知道如何使用。
重点是更新值时不要重启http服务器
def initializeWebServer(interface : String, port : Int) = {
system.scheduler.schedule(0 seconds, 10 seconds){
val result = /***/
}
val route: Route =
concat(
get{
path("getResult"){
complete(result)
}
}
)
val bindingFuture = Http().bindAndHandle(route, interface, port.toInt)
println(s"Server online at http://$interface:$port/")
CoordinatedShutdown(system).addJvmShutdownHook({
bindingFuture
.flatMap(_.unbind())
})
}
我想要的是:
val result = schedule( 10 sec){do something and return result}
我想你想要这样的东西:
var result = 0
val cancellable = scheduler.schedule(0.seconds, 10.seconds) {
result = result + 1
}
您可以使用 cancellable
值在不再需要时停止计划。
完整代码如下:
def initializeWebServer(interface: String, port: Int) = {
var result = 0
val canceallable = context.system.scheduler.schedule(0.seconds, 10.seconds) {
result = result + 1
}
val route: Route =
concat(
get {
path("getResult") {
complete(result)
}
}
)
val bindingFuture = Http().bindAndHandle(route, interface, port.toInt)
println(s"Server online at http://$interface:$port/")
CoordinatedShutdown(system).addJvmShutdownHook({
bindingFuture
.flatMap(_.unbind())
})
}
您可以使用演员对此进行建模:
class StateHolder extends Actor {
val state = ???
context.system.scheduler.schedule(0.second, 10.second, self, DoTask)
def receive = {
case DoTask => /* update state */
case GetState => /* fetch state */
}
}
scheduler
会导致 actor 向自己发送 DoTask
消息,然后您可以通过发送消息来获取当前状态。
我想在 akka http 服务器中定期更新一个值(稍后使用),我找到的唯一方法是使用调度程序,但我无法 return 从中获取一个值。
我尝试过使用 akka 调度程序,我也许应该使用 Future,但不知道如何使用。
重点是更新值时不要重启http服务器
def initializeWebServer(interface : String, port : Int) = {
system.scheduler.schedule(0 seconds, 10 seconds){
val result = /***/
}
val route: Route =
concat(
get{
path("getResult"){
complete(result)
}
}
)
val bindingFuture = Http().bindAndHandle(route, interface, port.toInt)
println(s"Server online at http://$interface:$port/")
CoordinatedShutdown(system).addJvmShutdownHook({
bindingFuture
.flatMap(_.unbind())
})
}
我想要的是:
val result = schedule( 10 sec){do something and return result}
我想你想要这样的东西:
var result = 0
val cancellable = scheduler.schedule(0.seconds, 10.seconds) {
result = result + 1
}
您可以使用 cancellable
值在不再需要时停止计划。
完整代码如下:
def initializeWebServer(interface: String, port: Int) = {
var result = 0
val canceallable = context.system.scheduler.schedule(0.seconds, 10.seconds) {
result = result + 1
}
val route: Route =
concat(
get {
path("getResult") {
complete(result)
}
}
)
val bindingFuture = Http().bindAndHandle(route, interface, port.toInt)
println(s"Server online at http://$interface:$port/")
CoordinatedShutdown(system).addJvmShutdownHook({
bindingFuture
.flatMap(_.unbind())
})
}
您可以使用演员对此进行建模:
class StateHolder extends Actor {
val state = ???
context.system.scheduler.schedule(0.second, 10.second, self, DoTask)
def receive = {
case DoTask => /* update state */
case GetState => /* fetch state */
}
}
scheduler
会导致 actor 向自己发送 DoTask
消息,然后您可以通过发送消息来获取当前状态。