我正在用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
接口并在那里创建一个(后者对于任何具有生命周期的东西都是首选)。