akka应用_处理Akka应用程序中的每个事件

akka应用

akka徽标 这里的事件,那里的事件,到处都是事件。 发布有关检查每一项Akka事件最终都能找到归宿的信息。

Akka和基于事件的React式应用程序是创建软件的新方法。 在当前基于Scala的项目中,我们非常密集地使用Akka。 事件非常适合我们的用例,因为我们正在与外部API通信,这可能很慢。 使用传统的同步方法处理时,这可能会损害用户体验。 但是幸运的是,我们的请求可以异步执行,因此将它们传递给Actor似乎是一个好主意。

当事情得到控制时

但是,事件虽然很酷并且非常有用,但是如果没有经验的人来处理,事件仍然会伤害项目。 异步性质使应用程序流程乍一看很难理解。 而且,每当您向系统中添加新的参与者或事件类型时,您忘记正确处理某件事的可能性就会增加。

让我们看一下示例类,这是一个处理与Image标签和注释关联的事件的actor:

class YourActor extends Actor {override def receive = {case event: ImageTagged =>doSomething()case event: OtherImageTaggedByFriend =>doSomething2()case event: MostMotedUserImage =>doSomething3()case event: MostCommentedFriendImageChosen =>doSomething4()}
}

当您添加下一个事件时,比如说MostLikedFriendImage,您很容易忘记在actor中添加处理程序大小写部分,尤其是当有多个actor在侦听此类事件时。

干违反解决方案

有一种简单的解决方案可以检测遗忘的处理程序。 我们可以将case _添加到每个actor:

class YourActor extends Actor {override def receive = {case event: ImageTagged =>doSomething()case event: OtherImageTaggedByFriend =>doSomething2()case event: MostMotedUserImage =>doSomething3()case event: MostCommentedFriendImageChosen =>doSomething4()case event: _ :logger.error("Received unknown event " + event.getClass.toString)}
}

虽然对于一个或两个参与者来说看起来还不错,但将相同的代码片段添加到多个参与者中却很麻烦,并且违反了DRY原则。 但是,最危险的是,您团队中的某个人可能会忘记添加它(就像有人说的那样: “每个可以被遗忘的手动任务都会被遗忘” )。 那么也许我们应该寻求更好的解决方案?

对任何未处理的事件做出React

事件不得处理

幸运的是,我们不会停留在容易出错的方法上。 当actor无法处理传递给他的事件时,将引发UnhandledMessage并将其发布到ActorSystem的EventStream。

因此,要处理每个被遗忘的事件,我们可以创建侦听器并将其订阅到EventStream:

class UnhandledMessageListener extends Actor {val logger = LoggerFactory.getLogger(getClass)override def receive = {case message: UnhandledMessage =>logger.error(s"CRITICAL! No actors found for message ${message.getMessage}"))if (!Environment.isProduction) {// Fail fast, fail LOUDlogger.error("Shutting application down")System.exit(-1)}}
}

并订阅代码片段:

val actorSystem = ActorSystem.create("projectActorSystem")val listener = actorSystem.actorOf(Props(new UnhandledMessageListener()))actorSystem.eventStream.subscribe(listener, classOf[UnhandledMessage])

就是这样。 现在,每当有一个参与者没有处理的事件时,我们都会知道这一点,尤其是在非生产环境中部署应用程序时!

翻译自: https://www.javacodegeeks.com/2014/06/handle-every-event-in-your-akka-application.html

akka应用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/342261.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

工业以太网交换机故障的排障步骤

工业以太网交换机在工业安防领域的应用可以说是非常的广泛了,我们在使用工业交换机的过程中,难免会遇到各种各样的故障问题,但是工业以太网交换机的故障有多种多样,不同的故障有不同的表现形式,那么,我们在…

EDA软件断供对国产芯片发展有什么影响?

美国断供EDA软件,对国产芯片发展有什么影响?国产EDA水平如何? 没有EDA,就没有芯片 EDA(Electronic Design Automation),即电子设计自动化,是利用计算机辅助完成集成电路芯片的设计…

前途无量的MEMS传感器技术

MEMS传感器即微机电系统(Micro-electro Mechanical Systems),是指将精密机械系统与微电子电路技术结合发展出来的一项工程技术,它的尺寸一般在微米量级。封装技术是MEMS传感器成功的关键,其技术包括SIP(系统…

工业以太网交换机几点常见故障解析

用户在使用工业交换机的时候,往往会碰到很多故障问题,由于工业交换机的故障现象是多种多样的,没有一个固定的排除步骤,我们在排除故障的过程中只能具体情况具体分析了。在这里,杭州飞畅科技的小编为此专门整理了一些大…

内置单片机的433无线模块高速连传典型运用

E61是高速型 433M 无线数传模块,内置高性能单片机和高速无线 RF 芯片,UART串口透明传输,工作在 425~450.5MHz 频段(默认 433MHz),发射功率最大1W。无线模块在“连续传输方式”下不限数据包的长度&#xff0…

飞畅科技-工业以太网交换机市场发展情况介绍

现如今,在各类工业工程中,我们通常会采用专用的工业以太网交换机,定义不同的太网帧优先等级,让用户所希望的信息能够以最快的速度传递出去。目前,我国工业以太网交换机行业整体上仍处于导入阶段,下游客户主…

只读副本和Spring Data第2部分:配置基础项目

在上一篇文章中,我们使用相同的数据设置了多个PostgreSQL实例。 我们的下一步将是使用这两个服务器来配置我们的spring项目。 如前所述,由于我们使用完全相同的数据库,因此我们将使用Spring Boot JPA帖子中的一些代码。 这将是我们的gradl…

窄带传输与LoRa扩频传输技术应用方案对比

一、窄带传输与lora模块扩频传输技术对比 上图为成都亿佰特电子科技有限公司基于AX5043https://www.ebyte.com/product-class.aspx?cid1和SX1278https://www.ebyte.com/product-class.aspx?cid1&pid182两款芯片方案研发的极具有特色的E31系列窄带无线传输模块和E32扩频无…

[渝粤教育] 新乡医学院三全学院 人体解剖学 参考 资料

教育 -人体解剖学-章节资料考试资料-新乡医学院三全学院【】 绪论单元测试 1、【单选题】下述哪一项不符合解剖学姿势 A、身体直立 B、两眼向前平视 C、上肢垂于躯干两侧 D、手掌向内侧 E、两足并立、足尖向前 参考资料【 】 2、【单选题】关于方位术语的正确描述是 A、人体仰卧…

工业以太网交换机选机攻略

工业以太网交换机是专门为满足灵活多变的工业应用需求而设计,提供一种高性价比工业以太网通讯解决方案。那么我们在选购工业交换机的时候该注意哪些问题呢?工业以太网交换机有哪些选购标准呢?接下来就跟随飞畅科技的小编一起来详细了解下吧&a…

物联网助力智慧农业,农民也能成为科技工作者

北京时间8月24日,新电商拼多多发布了2021年第二季度财报。财报显示,截至2021年6月30日,拼多多年度活跃买家数达到8.499亿,作为国内最大的农产品上行平台之一,拼多多同时宣布将专门设立100亿元农业科技专项。 “百亿农…

您是否尝试过MicroProfile Starter?

https://start.spring.io的SPRING INITIALIZR已经存在了一段时间,并且是引导新的Spring Boot应用程序的最佳方法。 到目前为止,即使不同的供应商为其实施提供了启动器,也没有类似的方式来引导新的MicroProfile项目。 但是等待已经结束&#…

物联网智能垃圾管理技术中传感器与数传电台的作用

全球变暖导致气候变化,这促使各国政府根据联合国2030年可持续发展目标减少碳排放足迹。迫使市政当局转向智能垃圾管理技术,以改善垃圾回收和收集。 智能垃圾管理技术,这个词看起来怪怪的,垃圾管理如何配得上智能管理这么高大上的…

工业以太网与现场总线技术各自优缺点和应用

现如今,随着“工业4.0”战略的展开,计算机技术、通讯技术、IT技术的发展已经渗入到工控领域,其中最主要的表现就是工业现场总线技术和工业以太网技术。其中工业现场总线技术,特别是以太网技术的广泛使用,为自动化技术带…

[渝粤教育] 江西财经大学 大学体育与健康生活 参考 资料

教育 -大学体育与健康生活-章节资料考试资料-江西财经大学【】 第一章 健康理念伴一生 1、【单选题】健康乃事一种在身体上,心理上和社会上的(),而不仅仅是没有疾病和虚弱的状态。 A、完满状态 B、兴奋状态 C、激动状态 D、积极状…

无线唤醒在灌溉系统上的应用

农业是一个国家的经济命脉,国家的发展离不开农业的发展。我国作为农业大国之一,随着农业的发展,农业用水占比也越来越高。并且我国目前农业上的灌溉主要还是以传统的人工灌溉为主。传统的人工灌溉主要有3大缺点: 灌溉人工成本高&a…

工业以太网在工业控制中的运用

在工业生产中,随着生产规模的扩大和复杂程度的提高,实际应用对控制系统的要求越来越高。那么,工业以太网交换机在工业控制中的应用有哪些?接下来我们就跟随飞畅科技的小编一起来了解下吧! 在20世纪50~60年…

lucene索引_在崩溃或断电后测试Lucene的索引耐久性

lucene索引Lucene有用的事务功能之一是索引持久性 ,它可以确保一旦成功调用IndexWriter.commit ,即使操作系统或JVM崩溃或断电,或者您杀死-KILL JVM进程,重启后索引也将保持完整(未损坏),并将反…

不缠电线不剥线皮接灯泡的方法

教你个好方法,不缠电线不剥线皮,带电接灯泡 需要准备快速接头,一边用来压接负载线,一边用来带电接火线或零线。 先一个接头卡住火线线压紧,同样的方法压接零线;另一边用另一种接头压紧电线,再…

工业以太网在工业领域的应用特点详解

工业以太网交换机专门为满足灵活多变的工业应用需求而设计,提供一种高性价比工业以太网通讯解决方案。那么,工业以太网在工业领域的应用特点有哪些呢?接下来我们就跟随飞畅科技的小编一起来详细了解下吧! 一、工业以太网技术的概…