actor模型

Akka是一个基于Actor模型的Java虚拟机平台,用于构建高并发、分布式和容错的应用。Actor通过消息传递实现并发,避免数据共享带来的死锁和资源争夺。Akka HTTP模块提供了全HTTP栈的功能,用于构建网络服务,其路由DSL允许开发者以高抽象度定义HTTP路由。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

actor模式是一种并发模型

线程通过消息传递进行合作,线程叫actor

mapreduce是一种典型的actor

单线程编程:程序是一个工厂,只有一个工人,干所有的事儿,

多线程编程-共享内存

干啥都要排队

多线程/分布式编程:流水线,分工明确,每个线程都是一个actor,传递消息的方式进行

什么是actor:

可以看做是一个个独立的实体,单体之间毫无关联,可以通过消息,让其他的实体做出对应的事件

基于并发机制,scala运用消息的发送接收实现高并发

actor不共享数据,避免死锁,资源争夺

actor消息发送接收

object或者class继承actor
重写act方法
调用actor的start执行actor
通过不同的方式对actor发消息
act方法中通过receive方法接收消息,并进行相应的处理
act方法执行完成之后进行相应的处理

发消息的方式

操作描述
!发送异步消息
!?发送同步消息
!!发送异步消息,返回值是Future[Any]
- Futur表示一个异步操作的结果状态,可能还没有实际完成异步任务的结果
- Any是所有类的超类,Future[Any]的泛型是异步操作结果的类型

结合样例类发送接收消息

将消息封装在一个样例类中
通过匹配不同的样例类去执行不同的操作
actor可以返校消息给发送方,通过sender方法向当前消息发送返回消息

akka分布式应用框架

akka是java虚拟机平台上构建高并发,分布式和容错应用的工具包和运行时,akka用scala编写,同时提供scala和java开发接口,akka处理并发基于actor模型,唯一通信截止是消息传递

基本概念

akka创建一个对象,actorsystem是actor中的根acotr,一个actorsystem是一组共享通用配置(调度程序,部署,远程功能和地址),是创建或查找actor的切入点是一个扩展actorrefactory特质的抽象类

 

/user
所有用户创建的actor的守护actor,使用ActorSystem.actorOf创建的actor都属于他的子Actor
/system
系统创建的守护actor,actor系统开始通过配置自动部署的日志监听器,或者actor
/deadletter
请求挂掉actor的actor所有停止 或者不存在的actor或者不存在的actor会将请求重定向到他的邮箱中(尽力而为,即使在本地jvm也可能丢失消息)
/temp
是所有创建出来,声明周期却很短的actor的守护者,例如执行actorRef.ask生成一个临时的actor和对饮的actorRef然后发送消息给其他的actor并返回一个future只要对这个future处理完成这个临时的actor就会关闭并回收资源
/remote
这个actor管理着所有的远程actor

ActorRef

actorRef是actor的引用,主要作用是支持向他所代表actor发送消息,为了使actor和外界隔离或者减轻耦合度,使用一个actorRef把数据传递到Actor邮箱中

一个actor包括

mailbox(邮箱):用于存储需要actor处理的信息或数据
behavior(行为):描述怎么处理邮箱中的信息
state(状态):actor运行时状态
supervisorStrategy(管理子actor的策略):用于描述如何管理子actor的策略,大多用于容错
children(子actor集合):当前actor所监管的子actor

Actor-Path

由于actor是以严格等级的方式创建的,所以一个由actor根据父子关系,顺序递归到root而形成的actor系统的唯一序列

一个actro可以使用多于一条路径到达

Akka http实现web应用

akka http模块组在akka-actor和akka-stream基础上实现了全http栈(服务器-客户端)的功能,并不是一个web框架,而是一个更通用的工具箱,以便于生成提供或者消费基于http的网络服务,虽然与浏览器进行互动是其功能的组成部分,但这个并不是akka http 的主要目的

开发者不需要基于akkahttp开发,而是应该使用任何合理的基础开发应用,并只有当http整合时引入akkahttp

akka http可以作为一个独立的jar引入,akka-http由两个模块组成,akka-http和akka-http-core,因为http依赖于akka-http-core,开发者不需要显示的引入后者,如果开发者只依靠底层api开发的时候可能要显示的引入一下

http服务端路由DSL

akka http在高抽象度的api提供了一套路由dsl来描述http路由和其相关处理,每一个路由可以是一或几个不同的directive层级组合而成,每一个路由则专注处理一个类型的请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值