Akka Doc
2016-07-13 10:59:20 0 举报
AI智能生成
Akka是一个用Scala编写的开源工具包,用于构建高并发、分布式和容错的应用程序。它提供了一个运行时环境,使得开发者能够更容易地构建和管理复杂的多线程系统。Akka的核心组件包括Actor模型、消息传递系统和集群管理功能。Actor模型是一种基于事件的并发编程范式,允许开发者将程序分解为一组相互协作的独立实体。消息传递系统则负责在Actor之间传递消息,实现数据的流动和处理。集群管理功能使得Akka能够自动处理节点故障、负载均衡和数据一致性等问题,从而提高系统的可靠性和可扩展性。总之,Akka是一个强大且灵活的工具,适用于构建各种规模的高性能应用程序。
作者其他创作
大纲/内容
1对1 和 多对一策略
OneForOneStrategy
默认
停止子Actor(使用preRestart) 会中断所有Actor
AllForOneStrategy
适用于child依赖紧密的情况,重启不情况mailbox
停止子Actor 不会中断其他子节点
Actor References 类型
本地类型 不支持网络连接远程Actor
本地类型,支持在同一个JVM虚拟机中连接远程Actor
本地Actor 的子类型,支持使用route 直接发送消息
远程Actor ,支持序列化消息并发送给远程Actor
行为与本地Actor类似的Actor 特例
PromiseActorRef
DeadLetterActorRef
支持发送空消息,同时支持发送消息到DeadLetter 目录
EmptyLocalActorRef
支持发送空消息,同时支持通过网络远程连接比较消息目录是否存在
允许创建Actor 并销毁,再次创建新Actor时 尽管路径与原Actor 相同,但是是不同的Actor,因此消息将被发送到老的Actor对应的路径(无法到达) 而不是新的Actor的路径,尽管路径相同
创建Actor
ActorSystem.actorOf 创建 监管者
ActorContext.actorOf 使用Actor
区别
创建Actor 和其子Actor actorOf
不创建Actor 和校验Actor 是否存在,子负责对存在的消息进行发送
也可以使用ActorSystem.actorSelection 创建Actor 并获得相关Actor 关系
? 和!
? 与ask 相同 Fire-forget
告知并且异步得到回复,
! 与tell 相同,仅告知
Akka
分布式,并发,容错,异步 平台
理念
Parallelism 并行
Asynchronous 异步
non-blocking 无锁
Deadlock 死锁
jar 包
akka-actor
Actor 核心
akka-cluster
分布式成员管理
akka-remote –
远程Actor
akka-testkit –
test 工具包
akka-agent
整合Scala STM
目录节点
/user:
SupervisorStrategyConfigurator. 配置监管策略,默认当父结点终端,其子节点全部shutdown
/system
能够对除Logger Actor(单独线程) 外的所有Actor 执行中断 ,并能无限重启除初始化异常和Kill 异常外所有异常导致的程序中断
/
top-Level 等级
图例
当userGuardian死的时候system guardian会将自己关闭。当userGuardian关闭时这是合乎常理的, 他下面所有的业务actor都停掉了所以所有的管理员actor都需要一样停掉。
/deadLetters
存放所有 没有目的地的消息和异常消息
/temp
存放所有短时Actor( 被实现ActorRef.ask接口的)
/remote
存放 所有监管者是远端的Actor
重启
1.挂起actor 及其子actor
2.hook 老Actor 执行preReStart 并 对其子Actor 执行PreStart操作
3.等待所有子Actor 执行完成preReStart 所有子操作都无锁的
4. 创建新实例,并执行postRestart
5.发送消息重启所有子Actor
重启Actor
使用BackoffSupervisor
MailBox
UnboundedMailbox
SingleConsumerOnlyUnboundedMailbox
NonBlockingBoundedMailbox
UnboundedControlAwareMailbox
UnboundedPriorityMailbox
UnboundedStablePriorityMailbox
0 条评论
下一页