一、 Actor层次结构

Akka的Actor总会有他的父母。通常,您通过调用getContext().actorOf()创建一个actor 。这不是创建一个“独立”Actor,而是将新Actor作为孩子注入已经存在的树中:创建者Actor成为新创建的子Actor的父级。那么你可能会问,你创建的第一个Actor的父母是谁?
Akka的Actor总是属于父母。通常,您通过调用getContext().actorOf()创建一个actor 。这不是创建一个“独立”Actor,而是将新Actor作为孩子注入已经存在的树中:创建者Actor成为新Actor的子Actor的父级。那么你可能会问,你创建的第一个Actor的父母是谁?

如下图所示,所有Actor都有一个共同的父母,即用户监护人。可以在此actor下使用system.actorOf()创建新的actor实例.创建actor会返回一个有效URL的引用。

例如:如果我们通过system.actorOf(…, "someActor")创建一个someActor,其参考将包括路径/user/someActor

实际上,在代码中创建Actor之前,Akka已经在系统中创建了三个actor。这些内置Actor的名字包含guardian ,因为他们监督他们路径中的每个子Actor。guardian Actor包括:

  •  / 所谓的根守护者。这是系统中所有actor的父级,也是系统本身终止时停止的最后一个。
  • /user 的监护人。这是所有用户创建的actor的父actor。不要让名称user混淆你,它与最终用户无关,也与用户处理无关。使用Akka库创建的每个actor都会在其/user/前面加上常量路径。
  • /system 该系统的监护人。

二、代码测试

(一)首先建立maven工程

(二)添加依赖,创建类

<dependency><groupId>com.typesafe.akka</groupId><artifactId>akka-actor_2.12</artifactId><version>2.5.22</version>
</dependency>

如图所示:

(三)编写代码

import akka.actor.AbstractActor;
import akka.actor.AbstractActor.Receive;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import akka.actor.Props;class PrintMyActorRefActor extends AbstractActor {static Props props() {return Props.create(PrintMyActorRefActor.class, PrintMyActorRefActor::new);}@Overridepublic Receive createReceive() {return receiveBuilder().matchEquals("printit",p -> {ActorRef secondRef = getContext().actorOf(Props.empty(), "second-actor");System.out.println("Second: " + secondRef);}).build();}
}
public class ActorHierarchyExperiments {public static void main(String[] args) throws java.io.IOException {ActorSystem system = ActorSystem.create("testSystem");ActorRef firstRef = system.actorOf(PrintMyActorRefActor.props(), "first-actor");System.out.println("First: " + firstRef);firstRef.tell("printit", ActorRef.noSender());System.out.println(">>> Press ENTER to exit <<<");try {System.in.read();} finally {system.terminate();}}
}

(四)运行

(五)分析

代码比较简单。在main函数中firstRef向Actor发送了一条消息。Actor收到消息后进行了处理。

  • 两条路径都以akka://testSystem/。由于所有Actor引用都是有效的URL,因此akka://是协议字段的值。
  • 接下来,就像在万维网上一样,用URL标识系统。在此示例中,系统已命名testSystem,但它可以是任何其他名称。如果启用了多个系统之间的远程通信,则URL的这一部分包含主机名,以便其他系统可以在网络上找到它。
  • 因为第二个actor的引用包含路径/first-actor/,所以它将其标识为第一个的子节点。
  • Actor的最后一部分,#后边的一连串数字是在大多数情况下可以忽略的唯一标识符。

Akka的Hello World(一)Akka的Actor架构相关推荐

  1. Akka之在IoT系统中使用Actor(一)

    (一)IoT系统介绍 通过了解Actor的层次结构和行为,剩下的问题是如何将IoT系统的顶层组件映射到actor.将代表设备和仪表板的Actor放在顶层可能很诱人.相反,我们建议创建一个代表整个应用程 ...

  2. akka mysql_Akka系列(七):Actor持久化之Akka persistence

    这次把这部分内容提到现在写,是因为这段时间开发的项目刚好在这一块遇到了一些难点,所以准备把经验分享给大家,我们在使用Akka时,会经常遇到一些存储Actor内部状态的场景,在系统正常运行的情况下,我们 ...

  3. akka学习教程(十四) akka分布式实战

    akka系列文章目录 akka学习教程(十四) akka分布式实战 akka学习教程(十三) akka分布式 akka学习教程(十二) Spring与Akka的集成 akka学习教程(十一) akka ...

  4. Akka 学习(九)Akka Cluster

    参考文章 Gitter Chat,Akka 在线交流平台 Akka Forums,Akka 论坛 Akka in GitHub,Akka 开源项目仓库 Akka Official Website,Ak ...

  5. java akka 教程_快速入门 Akka Java 指南

    快速入门 Akka Java 指南 Akka 是一个用于在 JVM 上构建高并发.分布式和容错的事件驱动应用程序的运行时工具包.Akka 既可以用于 Java,也可以用于 Scala.本指南通过描述 ...

  6. Akka的Hello World(三)Actor失败处理

    父母和孩子在整个生命周期中都是相互联系的.每当一个actor失败(抛出异常或未处理的异常)时,它会暂时中止.如前所述,失败信息将传播到父级,然后父级决定如何处理子actor引起的异常.通过这种方式,父 ...

  7. Akka入门(二)Akka的Actor模型如何满足现代分布式系统需求

    Actor模型允许开发者: 在不诉诸锁定的情况下实施封装. 使用协作实体的模型对信号做出反应,改变状态,并相互发送信号以推动整个应用程序向前发展. 不要担心与我们的世界观不匹配的执行机制. (一) 消 ...

  8. Akka并发编程——第七节:Actor模型(六)

    主要内容: 1. Typed Actor定义 2. Typed Actor创建 3. 消息发送 1. Typed Actor定义 Akka中的Typed Actor是Active Objects设计模 ...

  9. Akka并发编程——第六节:Actor模型(五)

    本章主要内容: 1. !消息发送,Fire-and-Forget消息模型 2. ?消息发送,Send-And-Receive-Future消息模型 Akka提供了两种消息模型:fire-and-for ...

最新文章

  1. python元组用法详解(定义、下表查找、index()、count()、len())
  2. 离开当前屏幕的判断方法_掌中宝系列之EMG电动门调整方法
  3. 解读网络“攻城狮”的发展---老赵带你铺一段路
  4. 引导界面(二)使用ViewPager实现欢迎引导页面
  5. 九度 1545:奇怪的连通图
  6. 【项目管理】人力资源管理
  7. 百度地图开发总结----3.判断一个点是否在一片区域内
  8. 【Oracle RAC故障分析与处理】
  9. iPhone6和iPhone6 plus的iOS8设计尺寸参考指南
  10. matlab 英语怎么读,MATLAB SPTooL
  11. linux的python2.7的paramiko_centos7 python2.7下安装paramiko模块
  12. kuangbin专题五并查集总结
  13. 3D动漫游戏建模很难学?教你如何使用3DMax和ZBrush制作卡通角色
  14. nvidia-smi 查看显卡型号
  15. 服务器状态监控php源码,服务器状态监控_监控Linux服务器网站状态的SHELL脚本
  16. 六种不同型号的电灯泡
  17. python 内置函数、匿名函数
  18. hdu-4966 GGS-DDU 最小树形图
  19. 微信小程序 全局字体控制(字体大小)
  20. 人类早期驯服野生CNN卷积神经网络的情景

热门文章

  1. 域socket(domain socket)和ipsocket(TCP/IP socket)区别
  2. 放置奇兵 算法 月度活动 破碎时空记录 第六关 尸妖+鹿男(奥博隆)
  3. 【中级软考】位示图bitmap是什么?(利用二进制的一位来表示磁盘中的一个盘块的使用情况)
  4. 什么是泛型,为什么要使用泛型? 泛型类和泛型方法的实现以及限定通配符的使用。什么是泛型擦除,为什么有泛型擦除,泛型擦除到底是怎么实现的
  5. Edward Gaming, the Champion 字符串,模拟(2021.11.沈阳)
  6. Linux下安装RabbitMQ
  7. python程序_正确配置Python应用程序
  8. php trimmsg,c语言实现php的trim标签
  9. php静态方法场景,深入介绍PHP中的static的修饰方法和yield的使用场景
  10. ebm风扇选型手册_德国EBM离心风扇的八大结构组成你知道吗?