我有一个基于喷雾1.3.3的应用程序,我试图通过发送消息来停止http服务器。 官方文件说:
停止。要显式停止服务器,请发送Http.Unbind命令 HttpListener实例(此实例的ActorRef可用 作为Http.Bound确认事件的发送者来自何时 服务器已启动。)
以下是启动服务器的方式:
(IO(Http) ? Http.Bind(httpListener, interface = iface, port = port)).map {
case m: Http.Bound => println(s"Success $iface:$port")
case fail : Http.CommandFailed => println(s"Bad try :(")
}
我尝试将消息Http.Unbind发送到httpListener,但没有成功。似乎不是那个演员
可能我需要以某种方式提取Http.Bound消息的发送者引用?但是如何?
这是我的httpListener的负责人:
class MyHttpListener extends HttpServiceActor {
import context.dispatcher
def receive = runRoute(
path("shutdown") {
get {
actors.httpListener ! Http.Unbind
complete("Stopping server")
}
}
无论如何,我只想将http请求发送到/ shutdown并让我的应用程序停止运行
答案 0 :(得分:0)
sender
消息的Bound
应该是Spray监听器,所以当收到该消息时,您可以捕获它。
你没有发布你的演员,所以这有点不同,但我希望这会有所帮助。
class MyStarter extends Actor {
// this will be the listener
var myListener: ActorRef = _
override def preStart(): Unit = {
implicit val system = context.system
IO(Http) ! Http.Bind(...)
}
override def receive: Receive = {
case msg: Bound =>
// when you receive the Bound message it was sent by the listener
myListener = sender()
...
case ... => ...
}
}