2.5 角色的引用、路径和地址java
这一章描述,角色在一个有多是分布式的角色系统中是如何被识别和定位的。它关系到了角色系统造成的内在监管层级以及角色跨越多个网络节点之间通讯的位置透明化。

上述图片显示了角色系统中几个最重要实体之间的关系,请仔细阅读。网络
2.5.1什么是一个角色引用?分布式
一个角色引用是ActorRef的一个子类型,它的主要目的是为它所表明的角色提供发送消息的功能。每一个角色能够经过self字段访问本身指定(本地)的引用,这个引用包括发送者引用,默认会发送全部消息给别的角色。相反的,在消息处理期间,这个角色能够访问发送者引用,经过sender方法来呈现当前的消息。工具
这里提供了几个基于角色系统配置的不一样类型的角色引用:日志
- 角色系统中的纯本地引用被配置成不支持网络功能的,这些角色引用发送的消息不能经过一个网络发送到另外一个远程的JVM。
- 角色系统中的本地引用在被启用时,它表明了那些在同一个JVM里的角色支持网络功能。为了发送消息给别的网络节点,这些引用包含了协议和远程地址信息。
- 这里有一个用于路由器的本地角色引用的子类型(即角色混合了路由器的特性)。它的逻辑结构和上述的本地引用同样,有一点不一样的是,向它们发送的消息会被分发给它们的子角色中的一个。
- 远程角色引用表示了哪一个角色能够经过远程通讯到达,即发送消息给它们会透明的序列化消息,并把它们发送给远程的JVM。
- 这里有几个角色引用的特殊类型,它们表明了角色引用的全部实用目的:
- PromiseActorRef是Promise的一个特殊表明,它被用于完成一个角色的响应。akka.pattern.ask建立这个角色引用。
- DeadLetterActorRef是死亡信件服务的默认实现,定义那些Akka路径中终点是关闭或不存在的消息。
- EmptyLocalActorRef是Akka查找一个不存在的本地角色路径时返回的:它等同于DeadLetterRef,不过它保留了它的路径,这样Akka能够经过网络把它发送出去,而后能够经过它的路径和别的已经存在的角色引用进行比较,这样就能获得一些已经死亡的角色。
- 还有一些你可能还没见过的一次性的内部实现:
- 有一个角色引用,它并不呈现为一个角色,它只做为一个伪管理员的根部守护者(guardian,下同),咱们称它为“行走在时空泡沫中”。
- 第一个日志服务开启以前,事实上激起角色建立的工具是一个伪造的角色引用,它能接收日志事件并把它们直接打印到标准输出中,它就是Logging.
- StandardOutLogger。
阅读原文请点击事件