Dubbo专题目录
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源码工程 ,各个包说明
- dubbo-compatible 过期的类 用来兼容的
- 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。