java - 理解 Actor 创作的 Prop

标签 java scala akka

我正在尝试理解如何正确使用 Props。我的第一个想法是 Props 对象包含正在创建的 Actor 的一些属性。这些属性可能包括参与者的字段值以及一些与部署相关的信息(例如要使用哪个调度程序)。后者与实际 Actor 无关,因此应该独立运送。

但是在the documentation说好的做法是像这样在 actor 中使用静态工厂方法(已删除文档):

public class DemoActor extends UntypedActor {

  public static Props props(final int magicNumber) {
    return Props.create(new Creator<DemoActor>() {
      private static final long serialVersionUID = 1L;

      @Override
      public DemoActor create() throws Exception {
        return new DemoActor(magicNumber);
      }
    });
  }
}

我认为这不太好,例如我们现在想使用一个调度程序,并且需求在将来的某个时候会发生变化。这将导致修改(在我看来)不正确的 Actor 类。

最佳答案

我相信,静态工厂方法对于 Java 可能特别有用,Java 在 Akka 中往往变得非常冗长。虽然您显示的代码是针对 Actor 类的,但您通常还会有一些反转控制样式的配置 Bootstrap 类,您通常会在其中设置 actor系统,然后是具有 ActorSystem#actorOf 类的 Actor 。

现在,在从 Actor 的 props 工厂方法中检索基础 Props 实例后,您可以根据您的目的对其进行一些配置(Props 是不可变但有返回修改实例的方法)。如果您需要不同的调度程序,那么您只需修改您的 Bootstrap 类,如下所示:

ActorSystem system = ...;
system.actorOf(DemoActor.props(42), "demo-with-default-dispatcher");

到:

system.actorOf(DemoActor.props(42).withDispatcher("DemoDispatcher"), "demo-with-configured-dispatcher");

(这些只是最小的代码片段,但我想你明白了)

关于java - 理解 Actor 创作的 Prop ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38292848/

相关文章:

java - 为什么这段Java代码能够编译并运行?我不明白

java - 一台电脑上的多个akka系统

scala - 无法在 [[scala.concurrent.Future]] 上获取 `pipeTo` 方法

java - 仅读取文件夹中的最后两个文本文件

java - 读取int数组并检查它是否已排序

scala - 了解 Play 使用的是哪个 Akka 版本

Scala,猫, `ap` 的用法

Scala 高阶函数有点困惑

java - 如何向 Akka Router 中的所有 Actor 发送消息?

java - 切换通知显示