Im très nouveau à l'akka et à terme dans la scala. Im utilisant spray pour obtenir la sortie d'une URL et retourner un Future[String]
à un autre objet. Voici l'objet qui effectue la requête HTTP.Arrêtez le système akka avec le spray du système non akka
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()
}
}
Et voici la principale méthode dans l'autre objet où je suis en train d'arrêter le système d'acteur.
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()
Pour une raison quelconque, le système Akka ne s'arrêtera pas. J'ai également essayé d'arrêter le système akka en utilisant ma méthode d'arrêt mais j'ai une erreur Exception in thread "main" akka.pattern.AskTimeoutException: Timed out
(qui se produit également dans la méthode principale quand la méthode d'arrêt est appelée).
version 2.2.3 AKKA
version AKKA 2.2.3 et j'ai essayé ActionsService.system.awaitTermination() qui se termine apparemment jamais .. – Zee
ces méthodes existent dans DonT 2.2.3 – Zee