Akka向设备组添加Actor注册《thirteen》译
我们已经完成了设备级别的注册支持,现在我们必须在组级别实现它。在注册时,小组成员还有更多工作要做,包括:
- 通过将注册请求转发给现有设备actor或通过创建新actor并转发消息来处理注册请求。
- 跟踪组中存在哪些设备Actor,并在组停止时从组中删除它们。
处理注册请求
设备组Actor必须将请求转发给现有子项,或者应创建一个。要通过设备ID查找子actor,我们将使用Map <String,ActorRef>。
我们还希望保留请求的原始发件人的ID,以便我们的设备角色可以直接回复。这可以通过使用forward而不是tell运算符来实现。两者之间的唯一区别是,forward会保留原始发件人,而tell会将发件人设置为当前的actor。就像我们的设备actor一样,我们确保不会响应错误的组ID。将以下内容添加到源文件中:
Full source at GitHub
正如我们对设备所做的那样,我们测试了这个新功能。我们还测试了返回两个不同ID的Actor实际上是不同的,我们还尝试记录每个设备的温度读数,以查看Actor是否正在响应。
Full source at GitHub
如果注册请求已存在设备actor,我们希望使用现有的actor而不是新的actor。我们还没有测试过,所以我们需要解决这个问题:
Full source at GitHub
跟踪组中的设备Actor
到目前为止,我们已经实现了在组中注册设备actor的逻辑。然而,设备来来去去,所以我们需要一种从Map <String,ActorRef>中删除设备actor的方法。我们将假设当移除设备时,其相应的设备actor将停止。正如我们前面讨论的那样,监督只处理错误情况 - 不是优雅的停止。因此,我们需要在其中一个设备actor停止时通知父级。
Akka提供死亡观察功能,允许Actor观看另一个Actor,并在其他Actor停止时收到通知。与监督不同,观看不仅限于父子关系,任何Actor都可以观看任何其他Actor,只要它知道ActorRef即可。在观看的Actor停止之后,观察者接收终止(actorRef)消息,该消息还包含对观看的Actor的引用。观察者可以显式处理此消息,也可以使用DeathPactException失败。如果Actor在观看Actor停止后不再履行自己的职责,后者就很有用。在我们的例子中,该组在一个设备停止后仍然应该起作用,因此我们需要处理Terminated(actorRef)消息。
我们的设备组Actor需要包含以下功能:
- 在创建新设备Actor时开始观察它们。
- 当通知指示已停止时,从Map <String,ActorRef>中删除设备actor,该设备actor将设备映射到设备actor。
不幸的是,Terminated消息只包含子actor的ActorRef。我们需要actor的ID将其从现有设备的映射中移除到设备actor映射。为了能够执行此删除,我们需要引入另一个占位符Map <ActorRef,String>,它允许我们找出与给定ActorRef对应的设备ID。
添加识别actor的功能实现:
Full source at GitHub
到目前为止,我们无法获得组设备主体跟踪的设备,因此,我们无法测试我们的新功能。为了使其可测试,我们添加了一个新的查询功能(消息RequestDeviceList),列出了当前活动的设备ID:
Full source at GitHub
我们几乎准备好测试设备的移除。但是,我们仍然需要以下功能:
- 从我们的测试用例中停止设备actor。从外面看,任何Actor都可以通过发送特殊的内置消息PoisonPill来停止,该消息指示Actor停止。
- 在设备actor停止后收到通知。我们也可以将Death Watch设施用于此目的。TestKit有两个我们可以轻松使用的消息,watch()来监视一个特定的actor,而expectTerminated断言被监视的actor已被终止。
我们现在再添加两个测试用例。首先,我们测试一旦添加了几个设备,我们就会返回正确的ID列表。第二个测试用例确保在设备actor停止后正确删除设备ID:
Full source at GitHub
创建设备管理器角色
要进入层次结构中的下一个级别,我们需要在DeviceManager源文件中为设备管理器组件创建入口点。此actor与设备组actor非常相似,但是创建设备组actor而不是设备actor:
Full source at GitHub
我们将设备管理器的测试留作练习,因为它与我们为组Actor编写的测试非常相似
What’s next?
我们现在有一个分层组件,用于注册和跟踪设备和记录测量。我们已经了解了如何实现不同类型的会话模式,例如:
- Request-respond(用于温度记录)
- Delegate-respond(用于设备注册)
- Create-watch-terminate(用于创建组和设备actor作为子项)
在下一章中,我们将介绍组查询功能,它将建立一个新的分散 - 聚集对话模式。特别是,我们将实现允许用户查询属于组的所有设备的状态的功能。
下节再续!
原文:https://doc.akka.io/docs/akka/2.5/guide/tutorial_4.html
有什么讨论的内容,可以加我公众号:
Akka向设备组添加Actor注册《thirteen》译相关推荐
- Akka与设备组一起工作《twelve》译
Dependency 在项目中添加以下依赖项: 介绍: 让我们仔细看看我们的用例所需的主要功能,在用于监控家庭温度的完整物联网系统中,将设备传感器连接到我们系统的步骤可能如下所示: 家中的传感器设备通 ...
- Akka查询设备组《fourteen》译
加入以下依赖到项目中: 介绍: 到目前为止,我们看到的会话模式很简单,因为它们要求Actor保持很少或没有状态. 特别: 设备actor返回一个读数,不需要更改状态. 记录温度,更新单个字段. 设备组 ...
- DLNA设备、服务的注册及响应
DLNA设备.服务的注册及发现(依赖开源库cling) 本文是跟踪代码的记录,因为wifi网络不太好,不能debug跟踪,后面在能够但不跟踪时,会理一下,设备之间的连接过程,及音视频数据的传递过程. ...
- platform设备的添加
今天我以fb设备的注册过程来分析platform设备的添加流程 platform总线是kernel中最近加入的一种虚拟总线,它被用来连接处在仅有最少基本组件的总线上的那些设备.这样的总线包括许多片上系 ...
- 利用Amazon Lambda实现Amazon IoT设备证书的即时注册
背景介绍 为了保证通信的安全性,Amazon IoT设备与Amazon IoT Core的MQTT通信使用基于证书的TLS 1.2双向认证体系.所谓的双向认证,即意味着Amazon IoT设备端需安装 ...
- 关于驱动和设备的相关的注册表键的位置,和相关信息
关于驱动和设备的相关的注册表键的位置,和相关信息 MSDN上有了: https://msdn.microsoft.com/en-us/library/windows/hardware/ff549815 ...
- AKHQ:用于Apache Kafka管理主题、主题数据、消费者组、模式注册表、连接等的Kafka GUI。。。
参考文章:https://www.5axxw.com/wiki/content/q7nyiu AKHQ(以前称为KafkaHQ) 用于Apache Kafka管理主题.主题数据.消费者组.模式注册表. ...
- 【linux iic子系统】i2c设备的添加方法(四)
文章目录 前言 一.静态注册 二.动态注册 三.用户空间注册 四.i2c驱动扫描注册 前言 I2C设备的4种添加方法: 1)静态注册 2)动态注册 3)用户空间注册 4)i2c驱动扫描注册 一.静态注 ...
- R语言ggplot2可视化分面图(facet_grid):ggplot2可视化为分面图的每个组添加平均值线条
R语言ggplot2可视化分面图(facet_grid):ggplot2可视化为分面图的每个组添加平均值线条 目录
最新文章
- 【软件工程】CMMI 能力成熟度模型集成 ( 简介 | 相关术语 | CMMI 等级评估次序 )
- 生成对象---工厂方法模式
- bellman ford java_Java C 实现Bellman-ford算法
- 【课题总结】OpenCV 抠图项目实战(5)自适应阈值抠图
- 民科微服务小程序怎么注册_民科微服务小程序(医师护士电子化注册系统入口)公众号...
- 部队计算机考试题,2020军队文职计算机知识:计算机考试练习题(1)
- Android Framebuffer设置分辨率
- SparkSQL统一数据的加载与落地
- 云存储市场上演“新三国演义”
- win10共享计算机win7,win7和win10共享文件怎么设置_win10和win7建立局域网共享操作方法...
- Scratch二次开发6:如何保存作品到自己的服务器
- 交友约会APP源码大家有吗
- 关于我的 “二进制部署 kubernetes 集群” 的体验
- h5唤起App两种方式 Schema Universal Link
- 库克开怼谷歌和Facebook:自己搞的烂摊子,要会自己收拾
- Error serializing object. Cause: java.io.NotSerializableException: com.qi
- STM32F简单应用
- Android获取定位经纬度
- 2020春节假期VR/AR资讯汇总
- 天敏机顶盒T2四核增强强制安装驱动和刷机(转载且实践认证过)