【问题标题】:How to reference to the standard ActorSystem of play framework 2?如何参考play framework 2的标准ActorSystem?
【发布时间】:2015-05-08 12:52:20
【问题描述】:

我想用akka的调度器,例子是这样的:

system.scheduler.scheduleOnce()

但是“系统”应该来自哪里并没有真正的信息。文档有点肤浅,有很多变化(akka 从核心 scala 中移出)。

如果我写

val system = akka.actor.ActorSystem("system")

我将拥有一个 ActorSystem,但它将是一个新的独立 ActorSystem,大约有 8 个新线程。我认为,这对于小型调度程序来说有点过头了,并不推荐。

如何才能重用现有的play framework 2系统? 谢谢

【问题讨论】:

    标签: scala playframework akka playframework-2.3


    【解决方案1】:

    要使用 Play 定义的默认演员系统,您必须导入 play.api.libs.concurrent.Akka helper

    Akka.system 将引用默认的 Actor 系统,然后您可以像使用自己创建的 Actor 系统一样使用它做任何事情:

    import play.api.libs.concurrent.Akka
    
    val myActor = Akka.system.actorOf(Props[MyActor], name = "myactor")
    Akka.system.scheduler.scheduleOnce(...)
    

    更新: 上述静态方法在 Play 2.5 中被弃用,并在 2.6 中被删除,所以现在你必须use dependency injection

    在 Scala 中:

    class MyComponent @Inject() (system: ActorSystem) {
    
    }
    

    在 Java 中:

    public class MyComponent {
    
        private final ActorSystem system;
    
        @Inject
        public MyComponent(ActorSystem system) {
            this.system = system;
        }
    }
    

    【讨论】:

    【解决方案2】:

    当您使用play.api.libs.concurrent.Akka 时,您使用的是由 play 创建的演员系统。事实上,这是鼓励的方式。 您可以在documentation 中阅读。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-18
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    相关资源
    最近更新 更多