Akka 指南 之「第 2 部分: 创建第一个 Actor」

第 2 部分: 创建第一个 Actor

依赖

在你项目中添加如下依赖:

<!-- Maven -->
<dependency>
  <groupId>com.typesafe.akka</groupId>
  <artifactId>akka-actor_2.11</artifactId>
  <version>2.5.19</version>
</dependency>

<!-- Gradle -->
dependencies {
  compile group: 'com.typesafe.akka', name: 'akka-actor_2.11', version: '2.5.19'
}

<!-- sbt -->
libraryDependencies += "com.typesafe.akka" %% "akka-actor" % "2.5.19"

简介

随着对 Actor 层次结构和行为的理解,剩下的问题是如何将物联网(IoT)系统的顶级组件映射到 Actor。让代表设备和仪表盘的 Actor 处于顶层是很有吸引力的。相反,我们建议创建一个表示整个应用程序的显式组件。换句话说,我们的物联网系统中只有一个顶级的 Actor。创建和管理设备和仪表板的组件将是此 Actor 的子 Actor。这允许我们将示例用例的体系结构图重构为 Actor 树:

actor-tree

我们可以用几行简单的代码定义第一个 Actor,即IotSupervisor。为了开始你的教程应用程序:

  • 在适当的包路径下中创建新的IotSupervisor源文件,例如在com.example包中;
  • 将以下代码粘贴到新文件中以定义IotSupervisor
package com.example;

import akka.actor.AbstractActor;
import akka.actor.ActorLogging;
import akka.actor.Props;
import akka.event.Logging;
import akka.event.LoggingAdapter;

public class IotSupervisor extends AbstractActor {
  private final LoggingAdapter log = Logging.getLogger(getContext().getSystem(), this);

  public static Props props() {
    return Props.create(IotSupervisor.class, IotSupervisor::new);
  }

  @Override
  public void preStart() {
    log.info("IoT Application started");
  }

  @Override
  public void postStop() {
    log.info("IoT Application stopped");
  }

  // No need to handle any messages
  @Override
  public Receive createReceive() {
    return receiveBuilder()
            .build();
  }
}

代码类似于我们在前面的实验中使用的 Actor 示例,但请注意:

  • 我们使用的不是println(),而是akka.event.Logging,它直接调用了 Akka 的内置日志功能。
  • 我们使用推荐的模式来创建 Actor,即通过在 Actor 内部定义props()静态方法来创建 Actor。

要提供创建 Actor 系统的主入口点,请将以下代码添加到新的IotMain类中。

package com.example;

import java.io.IOException;

import akka.actor.ActorSystem;
import akka.actor.ActorRef;

public class IotMain {

  public static void main(String[] args) throws IOException {
    ActorSystem system = ActorSystem.create("iot-system");

    try {
      // Create top level supervisor
      ActorRef supervisor = system.actorOf(IotSupervisor.props(), "iot-supervisor");

      System.out.println("Press ENTER to exit the system");
      System.in.read();
    } finally {
      system.terminate();
    }
  }
}

这个应用程序除了打印它的启动信息之外,几乎没有任何作用。但是,我们已经完成了第一个 Actor 的创建工作,并且准备好添加其他 Actor 了。

下一步是什么?

在下面的章节中,我们将通过以下方式逐步扩展应用程序:

  • 创建设备的表示。
  • 创建设备管理组件。
  • 向设备组添加查询功能。

英文原文链接Part 2: Creating the First Actor.


———— ☆☆☆ —— 返回 -> Akka 中文指南 <- 目录 —— ☆☆☆ ————

猜你喜欢

转载自blog.csdn.net/qq_35246620/article/details/86505966