如何在akka ActorSystem中关闭调度程序线程

时间:2013-07-16 06:11:17

标签: scala tomcat akka

我在Tomcat中通过ActorSystem使用akka 2.1.2,但是我无法将其关闭。我正在调用system.shutdown()来关闭实际的actor,但是留下了两个akka线程并阻止Tomcat停止:调度程序和调度程序。

我设法通过调用system.scheduler.asInstanceOf [DefaultScheduler] .close()来关闭调度程序 (作为Scheduler trait所需的强制转换没有close方法)。但是,我无法弄清楚如何让调度程序线程停止。我尝试了在akka.actor包中制作一个对象的狡猾技术,这样我就可以调用system.dispatcher.shutdown()(一个受保护的方法),但这不起作用 - 仍然有一个或多个akka调度程序线程挂起之后。

如何关闭调度程序线程?只要它有效,它就不一定是理想/正确的方式。

1 个答案:

答案 0 :(得分:2)

我不确定是否有一些关机方法,但有两种方法可以提供帮助。正如它在文档中所写:

  

当调度员不再有任何演员注册时,它会等待多长时间才会关闭,默认为你的akka​​配置“akka。

您可以在reference.conf中设置akka.actor.default-dispatcher.shutdown-timeout,然后在调度员中设置detach您的演员。