2015-06-26 3 views
5

Ich habe einen Schauspieler mit dem Verhalten:Abgehende Verbindungsstrom geschlossen

def receive: Receive = { 
    case Info(message) => 
     val res = send("INFO:" + message) 
     installAckHook(res) 
    case Warning(message) => 
     val res = send("WARNING:" + message) 
     installAckHook(res) 
    case Error(message) => 
     val res = send("ERROR:" + message) 
     installAckHook(res) 
    } 

private def installAckHook[T](fut: Future[T]): Unit = { 
    val answerTo = sender() 

    fut.onComplete { 
     case Success(_) => answerTo ! "OK" 
     case Failure(ex) => answerTo ! ex 
    } 
    } 


    private def send(message: String): Future[HttpResponse] = { 
    import context.system 
    val payload: Payload = Payload(text = message, 
     username = slackConfig.username, icon_url = slackConfig.iconUrl, 
     icon_emoji = slackConfig.iconEmoji, channel = slackConfig.channel) 
     .validate 
    Http().singleRequest(RequestBuilding.Post(slackConfig.hookAddress, payload)) 
    } 

und einen Test

val actorRef = system.actorOf(SlackHookActor.props(SlackEndpointConfig(WebHookUrl,iconEmoji = Some(":ghost:")))) 
actorRef ! Error("Some error message") 
actorRef ! Warning("Some warning message") 
actorRef ! Info("Some info message") 
receiveN(3) 

und in der afterAll() Methode kann ich einen Shutdown auf dem System Schauspieler mit TestKit.

Es funktioniert, die Anfrage an den Server macht, aber es gibt Fehler aus dem akka ströme Teil:

[ERROR] [06/26/2015 11:34:55.118] [SlackHookTestingSystem-akka.actor.default-dispatcher-10] [ActorSystem(SlackHookTestingSystem)] Outgoing request stream error (akka.stream.AbruptTerminationException) 
[ERROR] [06/26/2015 11:34:55.120] [SlackHookTestingSystem-akka.actor.default-dispatcher-13] [ActorSystem(SlackHookTestingSystem)] Outgoing request stream error (akka.stream.AbruptTerminationException) 
[ERROR] [06/26/2015 11:34:55.121] [SlackHookTestingSystem-akka.actor.default-dispatcher-8] [ActorSystem(SlackHookTestingSystem)] Outgoing request stream error (akka.stream.AbruptTerminationException) 

Scheint, wie da ich eine Zukunft die abgehende Verbindung abgeschlossen haben werden, sollte bereits geschlossen, so ist das ist ein Fehler oder vermisse ich etw?

+0

ich das gleiche Problem haben. Danke für jede Hilfe. – jiangok

+0

Wir brauchen ein Abschaltmuster für akka-stream. Da die Flow-Akteure implizit sind, weiß ich nicht, ob es richtig ist, die in letitcrash.com/post/30165507578/shutdown-patterns-in-akka-2 genannten Techniken anzuwenden. – jiangok

+0

Downvoted für Faulheit. Weder die Überschrift noch die Tags geben einen nützlichen Kontext. – mc0e

Antwort

2

Sie müssen auch die HTTP-Verbindungspools heruntergefahren, so etwas wie

Http().shutdownAllConnectionPools().onComplete{ _ => 
    system.shutdown() 
} 

Vielleicht ist die akka http Testkit enthält einige Helfer

+5

Dies beginnt zu fragen, was sollte was schließen? Wir haben Verbindungspool, Akteursysteme und Akteur Materialisierer. So sollte es sein wie close http pool -> close materialize -> close system? – almendar

Verwandte Themen