2015-06-26 2 views
5

У меня есть актер с поведением:Исходящий поток соединение закрыто

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)) 
    } 

И тест

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) 

и в методе afterAll() я делаю отключение системы с помощью актера TestKit.

Он работает, запрос делает его на сервер, но есть ошибки из Акки потоков части:

[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) 

Похоже, так как у меня есть будущие завершено исходящее соединение должно быть уже закрыто, так это ошибка или я пропущу sth?

+0

У меня такая же проблема. Спасибо за любую помощь. – jiangok

+0

Нам нужен шаблон отключения для потока akka. Поскольку участники потока неявны, я не знаю, правильно ли применять методы, упомянутые в letitcrash.com/post/30165507578/shutdown-patterns-in-akka-2. – jiangok

+0

Downvoted для лености. Ни заголовок, ни теги не дают никакого полезного контекста. – mc0e

ответ

2

Вы должны также закрыли пулы соединений HTTP, что-то вроде

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

Может Акку HTTP тестового набор обеспечивает некоторые хелпер

+5

Это начинает поднимать вопрос, что должно закрыть что? У нас есть пул соединений, актерские системы и материализатор актеров. Так что это должно быть похоже на закрытый http pool -> close materialize -> close system? – almendar

Смежные вопросы