随笔分类 -  Akka源码分析

分析Akka源码
摘要:如果有小伙伴在看官方文档的时候,发现有些自相矛盾的地方,不要怀疑,可能是官方文档写错了或写的不清楚,毕竟它只能是把大部分情况描述清楚。开源代码一直在更新,官方文档有没有更新就不知道了,特别是那些官方不推荐的组件,文档描述可能已经过时了。所以也不能迷信官方文档,看我的源码讲解系列文章才是王道,一切以源 阅读全文
posted @ 2018-08-06 10:33 gabry.wu 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2018-08-03 17:55 gabry.wu 阅读(234) 评论(0) 推荐(0) 编辑
摘要:前面几篇博客,我们依次介绍了local和remote的一些内容,其实再分析cluster就会简单很多,后面关于cluster的源码分析,能够省略的地方,就不再贴源码而是一句话带过了,如果有不理解的地方,希望多翻翻之前的博客。 在使用cluster时,配置文件中的akka.actor.provider 阅读全文
posted @ 2018-08-02 16:33 gabry.wu 阅读(836) 评论(0) 推荐(0) 编辑
摘要:一个设计优秀的工具或框架,应该都有一个易用、强大的插件或扩展体系,akka也不例外。 akka的扩展方法非常简单,因为只涉及到两个组件:Extension、 ExtensionId。其中Extension在每个ActorSystem中只会加载一次,然后被akka管理。你可以在ActorSystem启 阅读全文
posted @ 2018-08-02 09:26 gabry.wu 阅读(443) 评论(0) 推荐(0) 编辑
摘要:在akka官网中关于远程actor交互,介绍了两种方法,一种是通过actorSelection查询,另一种是通过actorOf在远程节点创建一个actor。actorSelection我们之前的博客中已经介绍过,创建远程actor也有过简要说明,但其原理并没有做过多分析。下面就来分析一下如何在远程节 阅读全文
posted @ 2018-08-01 14:23 gabry.wu 阅读(682) 评论(0) 推荐(0) 编辑
摘要:上一篇博客中,我们研究了remote模式下如何发消息给远程actor,其实无论如何,最终都是通过RemoteActorRef来发送消息的。另外官网也明确说明了,ActorRef是可以忽略网络位置的,这其实有两点含义:1.ActorRef可以序列化后跨网络传输;2.ActorRef反序列化后在本地可以 阅读全文
posted @ 2018-07-31 16:05 gabry.wu 阅读(1422) 评论(0) 推荐(0) 编辑
摘要:remote模式下,网络链接的生命周期往往影响着对应Actor的生命周期,那么网络链接的生命周期是怎么样的呢? 每一个与远程系统的链路都是四个状态之一:空闲、活跃、被守护、被隔离。远程系统的某个地址没有任何通信之前其关联状态就是Idle(空闲)。当第一条消息试图发送给远程系统或入站链接被接受,链路的 阅读全文
posted @ 2018-07-31 10:37 gabry.wu 阅读(446) 评论(0) 推荐(0) 编辑
摘要:上一遍博客中,我们分析了网络链接建立的过程,一旦建立就可以正常的收发消息了。发送消息的细节不再分析,因为对于本地的actor来说这个过程相对简单,它只是创立链接然后给指定的netty网路服务发送消息就好了。接收消息就比较麻烦了,因为这对于actor来说是透明的,netty收到消息后如何把消息分发给指 阅读全文
posted @ 2018-07-30 17:26 gabry.wu 阅读(351) 评论(0) 推荐(0) 编辑
摘要:上一篇博客中,我们分析了Akka remote模式下消息发送的过程,但细心的读者一定发现没有介绍网络相关初始化、创建链接、释放链接的过程,本文就介绍一下相关的内容。 网络初始化就离不开ActorSystem的初始化,毕竟ActorSystem初始化之后就可以创建Actor并发送远程消息了。在Acto 阅读全文
posted @ 2018-07-30 14:17 gabry.wu 阅读(723) 评论(0) 推荐(0) 编辑
摘要:上一篇博客我们介绍了remote模式下Actor的创建,其实与local的创建并没有太大区别,一般情况下还是使用LocalActorRef创建了Actor。那么发消息是否意味着也是相同的呢? 既然actorOf还是委托给了LocalActorRef,那么在本地创建的Actor发消息还是跟以前一样的, 阅读全文
posted @ 2018-07-27 17:35 gabry.wu 阅读(757) 评论(0) 推荐(0) 编辑
摘要:在之前的博客中,我们分析过local模式下Actor的创建过程,最终还是调用了provider的actorOf的函数创建了Actor,在remote模式下provider就是RemoteActorRefProvider,所以这样就知道在哪里最终创建了Actor。 上面的代码很多,简单起见,先只分析最 阅读全文
posted @ 2018-07-27 13:40 gabry.wu 阅读(770) 评论(0) 推荐(0) 编辑
摘要:前面的文章都是基于local模式分析的,现在我们简要分析一下在remote模式下,ActorSystem的创建过程。 之前我们分析过,在创建provider过程中,是通过ProviderClass来判断具体是哪种模式的。从ProviderClass源码来看,当我们配置akka.actor.provi 阅读全文
posted @ 2018-07-26 18:01 gabry.wu 阅读(721) 评论(0) 推荐(0) 编辑
摘要:在我之前的博文中,已经介绍过要慎用Actor的ask。这里我们要分析一下ask的源码,看看它究竟是怎么实现的。 开发时,如果要使用ask方法,必须要引入akka.pattern._,这样才能使用ask(或者?)方法,那么想必ask是在akka.pattern._对应的包里面实现的。 上面是通过定位a 阅读全文
posted @ 2018-07-26 15:01 gabry.wu 阅读(1724) 评论(0) 推荐(0) 编辑
摘要:上一节我们深入讨论了ActorRef等相关的概念及其关系,但ActorRef和ActorPath的关系还需要再加以分析说明。其实还是官网说的比较清楚。 “A path in an actor system represents a “place” which might be occupied by 阅读全文
posted @ 2018-07-26 10:53 gabry.wu 阅读(1928) 评论(0) 推荐(0) 编辑
摘要:分析源码的过程中我们发现,Akka出现了Actor、ActorRef、ActorCell、ActorContext等几个相似的概念,它们之间究竟有什么区别和联系呢? /** * Actor base trait that should be extended by or mixed to creat 阅读全文
posted @ 2018-07-25 14:46 gabry.wu 阅读(909) 评论(0) 推荐(0) 编辑
摘要:在上一遍博客中,我们已经分析了actor创建的大致过程,但只是涉及到了Dipatcher/Mailbox/ActorCell/InternalActorRef等对象的创建,并没有介绍我们自定义的继承Actor特质的类如何完成初始化。这篇文章对这一部分内容进行简单的补充。在akka.actor.dun 阅读全文
posted @ 2018-07-25 09:23 gabry.wu 阅读(473) 评论(1) 推荐(0) 编辑
摘要:上一篇博客我们分析道mailbox同时也是一个forkjointask,run方法中,调用了processMailbox处理一定数量的消息,然后最终调用dispatcher的registerForExecution重新进行线程调度,达到循环处理邮箱消息的功能。接下来我们分析一下processMail 阅读全文
posted @ 2018-07-23 10:18 gabry.wu 阅读(1033) 评论(0) 推荐(0) 编辑
摘要:前面两篇文章简单介绍了ActorSystem、actor以及dispatcher和mailbox的创建,下面我们就来看一下actor发消息的内部机制。 同样还是回到一个简单的akka应用,通过之前的分析我们知道,helloActor应该是一个RepointableActorRef类型的对象,那么调用 阅读全文
posted @ 2018-07-20 18:30 gabry.wu 阅读(1106) 评论(0) 推荐(0) 编辑
摘要:上一篇博客我们介绍了ActorSystem的创建过程,下面我们就研究一下actor的创建过程。 普通情况下,我们一般使用ActorSystem的actorOf来创建actor,当然通过上一篇博客的介绍,我们已经知道actorOf是继承自ActorRefFactory的函数。 也比较简单,就是判断一下 阅读全文
posted @ 2018-07-20 14:15 gabry.wu 阅读(1188) 评论(0) 推荐(0) 编辑
摘要:由于本人对Akka比较感兴趣,也用Akka开发了一些系统,但对Akka的源码还没有具体分析过,希望研究源码的同时写一点博客跟大家分享。有不当之处还请指正。我准备采取Debug的方式来研究Akka的运行过程,从入口开始,直至分析Akka是如何运转的。这样虽然会有点乱,但比较直接,大家凑合着看吧。 使用 阅读全文
posted @ 2018-07-19 16:49 gabry.wu 阅读(4252) 评论(4) 推荐(3) 编辑