【问题标题】:When is Akka's default system ready in Play?Akka 的默认系统何时在 Play 中准备就绪?
【发布时间】:2015-01-06 03:18:48
【问题描述】:

我在 Play 2.3.7 中编写了一个应用程序,当尝试在 beforeStart 对象的 beforeStart 覆盖方法内创建一个演员(使用 Play 的默认 Akka.system())时,应用程序会因某些无限而崩溃递归调用beforeStart,最终由于Global对象未初始化而引发异常。如果我在onStart 方法中创建这个actor,那么一切都会顺利。

我的“直觉”是:“好的,这个actor必须在应用程序接收到第一个请求之前准备好,所以它必须在beforeStart上创建,而不是在onStart上”

Akka.system() 什么时候可以使用?

【问题讨论】:

    标签: akka playframework-2.3


    【解决方案1】:

    Akka.system 返回由AkkaPlugin 持有的ActorSystem。因此,如果你想使用它,你必须在AkkaPlugin被初始化之后使用它。 AkkaPlugin 的优先级为 1000,这意味着它在大多数其他内部插件(数据库、进化等)之后启动。 Global 插件的优先级为 10000,这意味着 AkkaPlugin 在那里可用(对于任何优先级 > 1000 的插件)。

    请注意文档中关于 beforeStart 的警告:

    在应用程序启动之前调用。

    由插件管理的资源,例如数据库连接,此时可能不可用。

    【讨论】:

      【解决方案2】:

      您必须在onStart() 中启动它,因为beforeStart() 被调用太早了——在像Akka(它实际上是一个插件)或任何数据库连接这样的东西被创建之前。其实the documentation for GlobalSettings states

      由插件管理的资源,例如数据库连接,此时可能不可用。

      一般指导 (confirmed by this thread) 是 onStart() 是创建演员的地方。在实践中,这对我也很有效。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-15
        • 1970-01-01
        • 2018-03-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多