使用来自非 akka 系统的 spray 关闭 akka 系统
Shut down akka system with spray from non akka system
我对 akka 和 scala 中的 futures 还很陌生。我正在使用 spray 将 URL 和 return a Future[String]
的输出输出到另一个对象。这是发出 HTTP 请求的对象。
object ActionsService {
private implicit val formats = DefaultFormats
implicit val system = ActorSystem()
import system.dispatcher
val pipeline = sendReceive ~> unmarshal[String]
def getActions: Future[String] ={
val out = getOutput("http://www.google.com")
out
}
def getOutput(url: String): Future[String] ={
val response = pipeline (Get (url) )
response
}
def shutdown(code: Int): Unit = {
IO(Http).ask(Http.CloseAll)(1.second).await
system.shutdown()
}
}
这里是我试图关闭 actor 系统的另一个对象中的主要方法。
import ExecutionContext.Implicits.global
def main(args: Array[String]) {
val test = ActionsService.getActions
test.onComplete {
case Success(x) => println(x)
case Failure(y) => println(y)
}
ActionsService.system.shutdown()
由于某种原因,akka 系统不会关闭。我还尝试使用我的 shutdown 方法关闭 akka 系统,但出现 Exception in thread "main" akka.pattern.AskTimeoutException: Timed out
错误(当调用 shutdown 方法时,也会在 main 方法中发生)。
akka 版本为 2.2.3
您没有指定您使用的 Akka 版本,但在上一个版本中您需要调用
system.terminate()
而是像这样等待终止(举个例子)
Await.ready(system.whenTerminated, Duration.Inf)
上面的答案最终对我不起作用,所以我不得不通过在调用关闭方法之前为 main 方法添加一个睡眠时间来阻塞线程。
def main(args: Array[String]) {
val test = ActionsService.getActions
Thread.sleep(700)
test.onComplete {
case Success(x) => println(x)
case Failure(y) => println(y)
}
CorporateActionsService.system.shutdown()
}
我对 akka 和 scala 中的 futures 还很陌生。我正在使用 spray 将 URL 和 return a Future[String]
的输出输出到另一个对象。这是发出 HTTP 请求的对象。
object ActionsService {
private implicit val formats = DefaultFormats
implicit val system = ActorSystem()
import system.dispatcher
val pipeline = sendReceive ~> unmarshal[String]
def getActions: Future[String] ={
val out = getOutput("http://www.google.com")
out
}
def getOutput(url: String): Future[String] ={
val response = pipeline (Get (url) )
response
}
def shutdown(code: Int): Unit = {
IO(Http).ask(Http.CloseAll)(1.second).await
system.shutdown()
}
}
这里是我试图关闭 actor 系统的另一个对象中的主要方法。
import ExecutionContext.Implicits.global
def main(args: Array[String]) {
val test = ActionsService.getActions
test.onComplete {
case Success(x) => println(x)
case Failure(y) => println(y)
}
ActionsService.system.shutdown()
由于某种原因,akka 系统不会关闭。我还尝试使用我的 shutdown 方法关闭 akka 系统,但出现 Exception in thread "main" akka.pattern.AskTimeoutException: Timed out
错误(当调用 shutdown 方法时,也会在 main 方法中发生)。
akka 版本为 2.2.3
您没有指定您使用的 Akka 版本,但在上一个版本中您需要调用
system.terminate()
而是像这样等待终止(举个例子)
Await.ready(system.whenTerminated, Duration.Inf)
上面的答案最终对我不起作用,所以我不得不通过在调用关闭方法之前为 main 方法添加一个睡眠时间来阻塞线程。
def main(args: Array[String]) {
val test = ActionsService.getActions
Thread.sleep(700)
test.onComplete {
case Success(x) => println(x)
case Failure(y) => println(y)
}
CorporateActionsService.system.shutdown()
}