第 2 部分: 创建第一个 Actor

依赖

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

1. <!-- Maven -->
2. <dependency>
3. <groupId>com.typesafe.akka</groupId>
4. <artifactId>akka-actor_2.11</artifactId>
5. <version>2.5.19</version>
6. </dependency>

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

13. <!-- sbt -->
14. 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。
1. package com.example;

3. import akka.actor.AbstractActor;
4. import akka.actor.ActorLogging;
5. import akka.actor.Props;
6. import akka.event.Logging;
7. import akka.event.LoggingAdapter;

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

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

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

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

26. // No need to handle any messages
27. @Override
28. public Receive createReceive() {
29. return receiveBuilder()
30. .build();
31. }
32. }

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

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

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

1. package com.example;

3. import java.io.IOException;

5. import akka.actor.ActorSystem;
6. import akka.actor.ActorRef;

8. public class IotMain {

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

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

17. System.out.println("Press ENTER to exit the system");
18. System.in.read();
19. } finally {
20. system.terminate();
21. }
22. }
23. }

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

下一步是什么?

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

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

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