Akka 的默认系统何时在 Play 中准备就绪?
When is Akka's default system ready in Play?
我在 Play 2.3.7 中编写了一个应用程序,当我试图在 Global
的 beforeStart
覆盖方法中创建一个 actor(使用 Play 的默认 Akka.system()
)时对象,应用程序因 beforeStart
的无限递归调用而崩溃,最终由于 Global
对象未初始化而引发异常。如果我在 onStart
方法中创建这个 actor,那么一切都会顺利。
我的 "intuition" 是:"ok, this actor must be ready before the application receives the first request, so it must be created on beforeStart
, not in onStart
".
Akka.system()
什么时候可以使用?
你必须在 onStart()
开始这个,因为 beforeStart()
被调用得太早了 - 在任何像 Akka(它实际上是一个插件)或任何数据库连接被创建之前。事实上,the documentation for GlobalSettings
states:
Resources managed by plugins, such as database connections, are likely not available at this point.
一般指导 (confirmed by this thread) onStart()
是创建演员的地方。在实践中,这对我也很有效。
Akka.system
returns ActorSystem
由 AkkaPlugin
持有。因此,如果要使用它,必须在 AkkaPlugin
初始化之后使用。 AkkaPlugin
的优先级为 1000,这意味着它在大多数其他内部插件(数据库、演变等)之后启动。 Global
插件的优先级为 10000,这意味着 AkkaPlugin
在那里可用(以及任何优先级 > 1000 的插件)。
注意文档中关于 beforeStart
的警告:
Called before the application starts.
Resources managed by plugins, such as database connections, are likely not available at this point.
我在 Play 2.3.7 中编写了一个应用程序,当我试图在 Global
的 beforeStart
覆盖方法中创建一个 actor(使用 Play 的默认 Akka.system()
)时对象,应用程序因 beforeStart
的无限递归调用而崩溃,最终由于 Global
对象未初始化而引发异常。如果我在 onStart
方法中创建这个 actor,那么一切都会顺利。
我的 "intuition" 是:"ok, this actor must be ready before the application receives the first request, so it must be created on beforeStart
, not in onStart
".
Akka.system()
什么时候可以使用?
你必须在 onStart()
开始这个,因为 beforeStart()
被调用得太早了 - 在任何像 Akka(它实际上是一个插件)或任何数据库连接被创建之前。事实上,the documentation for GlobalSettings
states:
Resources managed by plugins, such as database connections, are likely not available at this point.
一般指导 (confirmed by this thread) onStart()
是创建演员的地方。在实践中,这对我也很有效。
Akka.system
returns ActorSystem
由 AkkaPlugin
持有。因此,如果要使用它,必须在 AkkaPlugin
初始化之后使用。 AkkaPlugin
的优先级为 1000,这意味着它在大多数其他内部插件(数据库、演变等)之后启动。 Global
插件的优先级为 10000,这意味着 AkkaPlugin
在那里可用(以及任何优先级 > 1000 的插件)。
注意文档中关于 beforeStart
的警告:
Called before the application starts.
Resources managed by plugins, such as database connections, are likely not available at this point.