dubbo组件和实现原理

Dubbo专题目录

dubbo的spi原理原理

服务暴露实现原理

 

Dubbo介绍

分布式场景需要考虑 高性能,高可用,高扩展,3高,还涉及到网络,多线程,序列化,设计模式

dubbo是一款很不错的分布式框架,充分考虑了这些点,对这些点进行了封装,让程序员将更多精力放到业务上。

为了更好地了解和使用 Dubbo,今天来介绍一下 Dubbo 的主要组件和实现原理。

Dubbo分层

Dubbo是一款高性能 Java RPC框架 。

实现了  服务注册和发现 ,容错负载均衡,扩展性,基于接口的远程调用

Dubbo大致上分为3层

  • 业务层
  • RPC层
  • Remoting层

 

 

使用了哪些技术

Dubbo中使用了SPI、时间轮定时任务、服务注册与发现、Netty、序列化、自定义协议等等技术

javassist  jdk动态编译(SimpleJavaFileObject)

 

看dubbo源码需要的基本功底

1.java8 技术  ,java正则
2. jdk动态代理
3.模板方法设计模式
4.java反射   (isAssignableFrom ,isPrimitive ,method.invoke(config))
5.线程安全 双重检查锁 ,AtomicLong等类

 

如何看dubbo源码

下载dubbo源码工程  ,各个包说明

  1. dubbo-compatible 过期的类 用来兼容的
  2. dubbo-common 各种工具类           (很多方法都有测试类)

 

Dubbo-demo工程 的dubbo-demo-api工程 使用java接口方式调用dubbo

要注意的是  multicast组播协议 windows默认不支持 ,linux,mac可以


 

ProxyFactory

Dubbo的代理工厂,Dubbo之所以能够宣传像调用本地服务一样调用远程服务,就是用它实现的。@SPI扩展接口,默认实现是JavassistProxyFactory,还有一个实现是JdkProxyFactory,最终都会被StubProxyFactoryWrapper包装。

发布服务的url 中的 scope 属性判断是否发布本地或远程服务

 

查看生成的代理类

https://blog.csdn.net/hewei314599782/article/details/115695853

 

Javassist

Javassist是一个开源的分析、编辑和创建Java字节码的类库 ,动态创建类,方法
Dubbo无论是生产端的暴露服务创建的invoker代理还是消费端创建的代理调用,都会需要经过代理。而Dubbo中默认采用javassit代理,动态的在内存当中生成所代理类的字节码,来完成代理的功能。

 

 

@Adaptive注解作用

1 .作用在类上:在Dubbo中只有2个类上有Adaptive注解修饰,分别是 AdaptiveCompiler 和 AdaptiveExtensionFactory,表示拓展的加载逻辑由人工编码完成,即硬编码实现,举个例子,AdaptiveCompiler的comiple方法不需要在运行时根据URL中参数动态生成,直接代码中固定写死
2.作用在接口上:能在程序运行时,根据参数(URL中参数)动态生成接口的Adaptive自适应拓展类

 

 

@SPI注解

生成代理类

 

总结

我们首先了解 Dubbo 的分层和几个核心模块,分别介绍他们的职责。然后通过一个简单的例子,服务消费者调用服务提供者,用 Dubbo 的工作流程将各个模块串起来。

在这 22 步的流程中,以服务提供者和服务消费者的初始化为起点,用到了 Config 和 Proxy 以及 Protocol,Invoker。

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值