在Play2开发模式下关闭Akka系统



我正在用Akka和Play2开发我的应用程序。

当我第一次用~run运行play2应用程序时,我做了一个GET,我的自定义Actor系统在控制器中创建,它在2558端口上启动集群。

如果在我的代码中改变任何东西并使另一个GET播放重新编译并重新开始,但2558端口被占用,我有错误:Failed to bind to /127.0.0.1:2558 .

我不知道如何处理我自己的演员系统关闭工作与play2。我试图在onStop方法的GlobalSettings对象中做到这一点,但没有运气。

使用play.api.libs.concurrent.Akka.system获取参与者系统。你可以自定义这个演员系统,但你想在application.conf。Play会自动为你启动和关闭它。

如果出于某种原因你真的不想使用这个(但真的,我想不出任何理由为什么你不使用它),那么你需要等待actor系统在GlobalSettings.onStop方法中关闭,使用ActorSystem.awaitTermination。调用shutdown是非阻塞的,所以当Play重新启动它时,ActorSystem很可能还没有完全关闭并释放端口。

同样,不要在控制器中创建参与者系统。要么在Global中创建它,要么实现play.api.Plugin接口并在那里创建一个(后者对于任何具有生命周期的东西都是首选)。

最新更新