2014-06-18 87 views
3

我試圖阻止噴霧可以用下面的代碼的Web服務器:AskTimeoutException:噴霧罐服務器上停止

implicit val timeout = Timeout(10 seconds) 
val future = ask(IO(Http)(system), Http.Unbind(10 second)) 
Await.result(future, Duration.Inf) 

,但可惜的是,我收到以下異常:

[錯誤] AskTimeoutException::Timed out(AskSupport.scala:334) [error] akka.pattern.PromiseActorRef $$ anonfun $ 1.apply $ mcV $ sp(AskSupport.scala:334) [error] akka.actor.Scheduler $$ anon $ 11.run(Scheduler.scala:118)[error] akka.actor.LightAr rayRevolverScheduler $ TaskHolder.executeTask(Scheduler.scala:455) [錯誤] akka.actor.LightArrayRevolverScheduler $$匿名$ 12.executeBucket $ 1(Scheduler.scala:407) [錯誤] akka.actor.LightArrayRevolverScheduler $$匿名$ 12 .nextTick(Scheduler.scala:411) [錯誤] akka.actor.LightArrayRevolverScheduler $$不久$ 12.run(Scheduler.scala:363)

我在做什麼錯?

回答

3

問題是您發送Http.Unbind消息給錯誤的演員(即IO擴展的管理員角色 - 在本例中爲Http)。

您必須發送Http.Unbind消息到HttpListener(這是回覆Http.Bind消息與Http.Bound消息的演員)。下面的例子將Http.Bind給經理演員和Http.UnbindHttpListener

class TestActor extends Actor { 
    override def preStart = { 
    IO(Http) ! Http.Bind(self, interface = "localhost", port = 8080) 
    } 
    def receive = { 
    case Http.Bound(_) => 
     println("bound") 
     sender ! Http.Unbind(10 seconds) 
    case Http.Unbound => 
     println("unbound") 
     context.stop(self) 
    } 
} 

的更多信息可以在啓動和停止documentation部分找到。

+0

它的工作!非常感謝你。 –