理论教育 Scala开发实战:Akka框架模型

Scala开发实战:Akka框架模型

时间:2023-11-24 理论教育 版权反馈
【摘要】:虽然大多数流行语言的并发基于多线程之间的共享内存,使用同步方法防止写争夺,但Akka提供的则是基于Actor的并发模型。Akka框架实现了Actor模型,使用Akka框架能够编写出高容错性、高可伸缩性的Actor模型应用。在Akka框架中,所有Actor都彼此独立,通过邮件队列的机制,实现消息的非阻塞和异步处理。如图10-1所示是Akka消息通信模型。图10-1Akka消息通信模型借助Akka框架,不需要再关心Actor注册和查找的细节,只需要写相应的Actor实现业务逻辑即可。

Scala开发实战:Akka框架模型

Akka框架的灵感来自Erlang,它能更轻松地开发可扩展性,实现线程的安全应用。虽然大多数流行语言的并发基于多线程之间的共享内存,使用同步方法防止写争夺,但Akka提供的则是基于Actor的并发模型。

Akka框架实现了Actor模型,使用Akka框架能够编写出高容错性、高可伸缩性的Actor模型应用。在Akka框架中,所有Actor都彼此独立,通过邮件队列的机制,实现消息的非阻塞和异步处理。Akka可提供:

1)对并发/并行程序的简单的、高级别的抽象。

2)异步、非阻塞、高性能的事件驱动编程模型。

3)非常轻量的事件驱动处理(1GB内存可容纳约270万个Actor)。

在Akka框架中,Akka为程序员提供了简单的编程接口,使用户将主要精力放在业务问题的解决上,而将复杂的Actor通信、Actor注册、查找进行了封装。用户在写自己的Actor时需要实现akka.actor.Actor这个接口。详细的Actor编程,将在稍后的章节进行讲解。如图10-1所示是Akka消息通信模型。

978-7-111-54169-1-Chapter10-1.jpg(www.daowen.com)

图10-1 Akka消息通信模型

借助Akka框架,不需要再关心Actor注册和查找的细节,只需要写相应的Actor实现业务逻辑即可。现在ActorA想要与ActorB通信,只需要关心发送消息和消息反馈的处理,而不再关心Actor之间通信的细节。在ActorA中向ActorB发送消息,只需要简单地使用ActorB!Message即可完成消息的发送。

在Akka框架中是如何查找到Actor的呢?实际上在Akka框架中,每一个Actor都有一个唯一的URL,该URL的定义格式和万维网地址的定义格式非常相似。每一个Actor通过ActorSystem和Context初始化的时候,都会得到自己唯一的路径,路径格式如:akka.tcp://systemName@ip:port/user/topActorName/otherActorName,并且可以通过actorSelection(path)方法查找对应路径的Actor对象,该方法返回该Actor的引用。如图10-2所示是Akka中Actor路径命名格式。

978-7-111-54169-1-Chapter10-2.jpg

图10-2 Actor命名格式

在得到Actor引用之后,就可以发送消息了。下面将讲解Actor的几种创建方式。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈