2013-07-16 32 views
2

我通过Tomcat中的ActorSystem使用akka 2.1.2,并且无法关闭它。我打电话给正在关闭实际参与者的system.shutdown(),但是两个阿卡线程被留下并阻止Tomcat停止:调度程序和调度程序。如何关闭akka中的调度程序线程ActorSystem

我设法通过调用system.scheduler.asInstanceOf [DefaultScheduler] .close() (由于Scheduler特征没有close方法而需要强制转换)来关闭调度器。但是,我无法弄清楚如何让调度程序线程停止。我尝试了在akka.actor包中创建一个对象的狡猾技巧,以便我可以调用system.dispatcher.shutdown()(一种受保护的方法),但那并不奏效 - 仍然存在一个或多个akka调度程序线程挂起之后。

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

+0

作为第一步,我将升级到2.1.4,因为这是替换2.1.2的缺陷 –

+0

您是否在使用'system。 isTerminated'来检查'ActorSystem'是否真的关闭了?关机发生到与此同步e'system.shutdown'调用。 – sourcedelica

回答

2

我不确定是否有一些关闭方法,但有两种方法可以帮助。因为它是写在docs:

当调度员不再已注册的演员,多长时等待,直到它自行关闭,默认为你的阿卡CONFIGS“阿卡

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