dubbo
dubbo源码分析
吴键
这个作者很懒,什么都没留下…
展开
-
浅谈模式 - 桥梁模式
桥梁模式,我觉得是比较难理解的一个模式,它的定义很简单:将抽象和实现解耦,让它们可以独立变化。深刻理解却不容易。网上有很多案例,但这个模式如果以Demo来聊,我觉得无法学到它的精髓。这边以Dubbo中Transporter层的设计来说说桥梁模式。这个模式比较隐晦,挺难理解的。什么是抽象,什么是实现?它这里面的抽象指的不是抽象类或者接口。实现也不是指的具体实现类。我这边来解释下Transport...原创 2020-05-07 23:35:25 · 215 阅读 · 0 评论 -
dubbo有哪些不好看的代码
拿Dubbo源码为案例,来说说什么样的代码是优雅的。以下案例所用Dubbo源码版本2.6.4。我先声明下哈,Dubbo是个好框架,我只是在鸡蛋里挑骨头,不是在指责它不好。1.反向思维,尽快结束原则我认为是方法或者函数最有指导价值的一个思想,放在第一个说。要达到反向思维,尽快结束目的,我总结下3种方式① if判断反写,尽快return或者throw(最简单,最实用)② 减少不必要的els...原创 2020-05-06 22:35:14 · 160 阅读 · 0 评论 -
dubbo中的HttpServer
先看下Protocol的类结构Dubbo默认使用DubboProtocol,但也可以使用Http,Rest,Hessian,WebService这几种协议来发布和引入服务。这几种协议都基于HTTP。所以必然要发布HTTP接口。在dubbo的exchange层这篇文章中介绍到。Exchange层最主要的功能是构建了Request和Response的抽象,因为它要在TCP协议上做自定报文结构。所...原创 2020-05-03 19:42:55 · 321 阅读 · 0 评论 -
dubbo微服务之间流水号的隐式传递
什么是流水号?做开发的人都知道流水号这个概念,有业务流水号,交易流水号,请求流水号等等,各种流水号。无论是啥名字的流水号,目的都是为了在某个维度,让一系列动作有一个唯一的标识。后面方便查日志,查问题。系统间交互可以防止扯皮。比如交易流水号,唯一标识一笔交易,这边所说的交易可以是无业务含义的请求,也可以是账务交易。如果是标识无业务含义的请求。一般会在交易开始时生成一个32位或者64位的唯一编码...原创 2020-05-03 19:42:10 · 978 阅读 · 1 评论 -
dubbo微服务调用耗时统计
在文章使用注解记录方法执行时长中详细介绍了怎么记录一个方法的调用时长。这种方式适合自生应用对自己的应用做自检工作。在分布式微服务环境下,如果把一整套微服务的环境看成一个整体。想从整体去查看和分析微服务之间的调用情况,网络耗时情况,各个微服务的运行情况。就需要在服务级别去记录运行时长。看这张图。A调用B的过程可以得到4个时间戳。分别是① 调用前(请求还没发出)② 服务执行前(请求到到B,但...原创 2020-05-03 19:41:30 · 3046 阅读 · 1 评论 -
dubbo扩展类的初始化
SPI 全称为 Service Provider Interface,是一种服务发现机制。具体解释参考Dubbo官方文档的Dubbo SPI,这里面对JAVA SPI和Dubbo自己的SPI讲解非常清楚。这边谈一谈Dubbo初始化时的一些细节。dubbo有哪些扩展类?找到源码包中的/META-INF/dubbo/internal目录,会看到一堆SPI的配置。具体可以逐个翻开看看。com.al...原创 2020-05-03 19:40:49 · 382 阅读 · 0 评论 -
dubbo服务导出和引入
Dubbo服务的导出和引入,这部分在Dubbo官方文档的源码导读有很详细的讲解。这边分别给出连接。Dubbo源码导读-服务导出Dubbo源码导读-服务引入导出的入口每个需要导出的服务都要配置这么一条xml元素。信息包括interface和class(具体实现类)<dubbo:service interface="com.test.service.DemoService" class...原创 2020-05-03 19:40:03 · 434 阅读 · 0 评论 -
dubbo对注册中心的分装
Dubbo最主要干2个事情。第一个,对服务的导出和引入。第二个,维护注册中心的服务。对于第一个,尽量参考Dubbo官方文档,有详细解释。对于第二个,这边详细说说。首先找到服务注册和引用的入口RegistryProtocol,这部分不清楚的话,可以参考文档Dubbo官方文档-服务导出public void register(URL registryUrl, URL registedProvide...原创 2020-05-03 19:39:10 · 415 阅读 · 0 评论 -
dubbo的transporter层
介绍先来看下Dubbo的整体架构图。Transporter在倒数第二层。我用黄色线框框出来的区域。Transporter层,属于网络传输层,是Mina,Netty,Grizzly这几个服务器的抽象。为什么要单独抽象出一个Transporter层,而不是在Exchange层直接对Netty或者Mina引用?这个问题其实不难理解,Netty或者Mina对外接口和调用方式都不一样,如果在Exch...原创 2020-05-03 19:37:50 · 225 阅读 · 0 评论 -
dubbo的handler机制
Dubbo的整套handler。。。反正我刚看的时候挺头疼。从Protocol层到Transporter层。纵深3层。从DubboProtocol构建,被逐层传递到NettyServer,然后在逐层返回。整个过程中,还被不断包裹,从同步到异步,不停变换用法和说法。总之,看得挺累,还是坚持逐个分析一遍。下面来说说。先看一张图,是使用Dubbo Protocol并且使用Netty作为服务器的情况下H...原创 2020-05-03 19:37:01 · 1932 阅读 · 1 评论 -
dubbo的filter
在聊Dubbo Filter之前,我们先说说Web标准的javax.servlet.Filter。public interface Filter { // 初始化,Servlet容器启动时调用 void init(FilterConfig var1) throws ServletException; // 做过滤动作 void doFilter(ServletReq...原创 2020-05-03 19:35:43 · 488 阅读 · 0 评论 -
dubbo的exchange层
介绍先来看下Dubbo的整体架构图。Exchange在倒数第三层。我用黄色线框框出来的区域。Exchange层,属于信息交换层,是对Request和Response的抽象。为什么要单独抽象出一个Exchange层,而不是在Protocol层直接对Netty或者Mina引用?这个问题其实不难理解,Netty或者Mina对外接口和调用方式都不一样,如果在Protocol层直接对Mina做引用,...原创 2020-05-03 19:34:40 · 793 阅读 · 0 评论 -
dubbo的编码和序列化
为什么要序列化和反序列化RPC过程必然要序列化和反序列化。RPC是远程过程调用,A调用B,要经过网络,就会有数据传输,那就得在A端把请求参数序列化之后通过网络送到B端,B端进行反序列化。然后指向B服务,返回结果首先要在B端做序列化,之后通过网络送到A端,A端进行反序列化。这是一个完整的请求过程。分别产生2次序列化和反序列化动作。为什么要编码和反编码A调用B时,会传递信息,其中有一些公共的信...原创 2020-05-03 19:33:46 · 676 阅读 · 2 评论