Dubbo
2020-02-07 17:04:16 0 举报
AI智能生成
Dubbo思维导图
作者其他创作
大纲/内容
SPI
Dubbo SPI 和 Java SPI 的区别
1.Java SPI 在启动的时候就会加载所有的扩展实现;Dubbo SPI 在用到的时候才会去加载扩展实现,且会缓存扩展类的 Class 对象和扩展类的实例对象
2.Dubbo SPI 提供了 AOP、IOC 的功能
3.Java SPI 异常难定位
普通扩展
Adaptive自适应扩展
注解在接口实现类上,不会编译生成一个适配类,这个注解了 @Adaptive 的实现类就是接口的适配类
注解在接口方法上,使用 javassistCompiler 拼接字符串并编译,把这个动态生成的类作为适配类,然后再根据 URL 中的参数选择具体的扩展实现
IOC扩展
SPI 注入
SetXXX(Class clazz) 注入是根据类型 Class 去注入,从 Dubbo 配置文件中找注入的实现类,并且一定需要是 Adaptive 的方式
Spring 注入
SetXXX(Class clazz) 从 Spring 容器中先获取 bean name 为XXX 的,没有的话在根据 Class 类型获取 bean
AOP扩展
典型的装饰者模式,装饰对象中构造方法传入接口
Activate自动激活扩展
过滤器使用,根据条件创建多个扩展实现
服务暴露
解析配置文件<dubbo:service>,发起服务暴露
JavassistProxyFactory 动态代理实现类,创建代理对象 invoker,服务暴露动态代理的对象是接口实现
RegistryProtocol.doLocalExport 根据 URL 中参数 exprot 到具体协议(Dubbo)暴露服务,启动 netty 服务端,创建DubboExporter对象,exproter 持有之前的代理对象 invoker,并且会把 exporter 放入 map
RegistryProtocol 中还会完成和注册中心的连接注册和订阅
服务引用
解析 Dubbo 自定义的标签 <dubbo:reference>
RegistryProtocol.refer 注册中心的连接注册和订阅
订阅之后创建invoker,启动Netty连接远程服务,invoker放入Map
Cluster聚合Directory,Directory 中的 Map 含有 invoker ,在调用的时候从 DIrectory 中查找对应的 invoker
代理工厂生成代理类Proxy0,代理的对象是 MockClusterInvoker
服务调用过程
消费者发送 Request 消息
提供者接收 Request 消息
提供者发送 Response 消息
消费者接收 Response 消息
分层架构
十层架构
4种负载均衡策略
9种集群容错机制
支持的协议
序列化方式
注册中心
Dubbo 默认提供的注册中心
zookeeper
redis
广播
内存
服务提供者注册 providers,订阅 configurators
服务消费者注册 consumers,订阅 configurators、routers、providers
发布。发布就是创建临时节点
订阅。订阅第一次全量 pull 对应的节点数据,后面节点变更后会通知给订阅节点的服务,然后服务再全量 pull 节点的数据
缓存机制
集群容错
Cluster—容错机制
Directory
Router—路由
LoadBalance—负载均衡
0 条评论
下一页