dubbo学习笔记

dubbo架构分四部分:

1、registry:注册中心;
2、provider:提供者,启动时会将接口注册到注册中心;
3、consumer:消费者,启动订阅provider、configurators、routers;
4、monitor:监控中心;

dubbo启动步骤:

1、provider启动后会注册所有接口到registry,同时订阅configurators动态配置;
2、consumer启动后会订阅provider、configurators、routers;
3、订阅内容变更时registry会通知consumer变更;
4、consumer与provider建立长连接进行通讯;
5、consumer、provider通过异步线程定时发送统计数据到montior监控中心;

dubbo SPI核心方法:

ExtensionLoader.getExtension(String name) //获取接口的实现类;
<T> ExtensionLoader<T> getExtensionLoader(Class<T> type) //获取一个extensionLoader实现类然后缓存起来;
T getAdaptiveExtension()//获取一个扩展的装饰类,如果没有@Adaptive注解就动态创建一个装饰类

ExtensionLoader是一个用于加载扩展类的工厂类,每一个需要加载扩展的class都有一个对应的ExtensionLoader
每一个ExtensionLoader都包含type和objectFactory两个值

Class<?> type; //构造器初始化,要得到的接口名称
ExtensionLoader objectFactory; //AdaptiveExtensionFactory实例,ExtensionFactory接口的实现类;
volatile Class<?> cachedAdaptiveClass //如果从spi文件中读取到的class含有Adaptive注解的则赋值
Set<Class<?>> cachedWrapperClasses; //如果从spi文件中读取到的class含有type类型的构造函数那么就将这个class加入到缓存中
Map<String, Object> cachedActivates;//从spi文件中读取到的class注解存入到这个变量中,key为Adaptive的value,value为从class上获取的Adaptive对象;
ConcurrentMap<Class<?>, String> cachedNames;//将spi文件中读取到的class对象做为key,class的Adaptive注解的value值做为value存入;

cachedAdaptiveClass
objectFactory是dubbo提供IOC注入的所有对象管理
AdaptiveExtensionFactory是ExtensionFactory接口的实现类,其值有一个

private final List<ExtensionFactory> factories   //用于装载SpiExtensionFactory、SpringExtensionFactory

动态代理部分使用的javassist和jdk动态代理两种,默认使用javassist

服务发布

第一步:暴露本地服务
第二步:暴露远程服务信息
第三步:启动Netty
第四步:连接zk
第五步:注册远程服务到zk
第六步:监听zk

服务发布原理

1、通过ApplicationEventPublisherAware事件启动导出服务(ServiceBean.onApplicationEvent())。
2、export方法功能:

  • 加载配置文件
  • 组装注册中心url信息
  • 启动多个通信协议

3、ProxyFactory类主要用于获取远程接口的代理类作用:
getInvoker() //方法是用于服务端调用服务实现;
getProxy() //主要用于生成客户端调用服务端接口代理类
4、服务发布经过registry协议–>dubbo协议

Netty服务暴露

Netty服务暴露指的是接口服务的注册和Netty的启动时机
1、Netty服务暴露开始(RegistryProtocol.export)

  • 服务暴露的入口
  • 用于启动Netty服务
  • 向注册中心注册接口服务地址

2、数据交换层

  • 主要是服务的请求与响应处理例如:编码、解码、服务分发

3、网络传输层

用于抽象底层Netty和Mina的统一接口

4、打开服务

  • 启动服务器

Zookeeper创建节点

  • zk启动时采用持久化节点与临时节点来创建服务存储。
  • 对包名目录和provider目录采用持久化节点来创建,对于服务提供者的节点采用临时节点来存储。
  • 对于每一个节点采用订阅方式来监听节点的变化。

节点更新

  • 节点通知时会将新的配置更新到本地缓存文件,使用多线程技术处理;

集群容错

RegistryDirectory:集群目录服务

  • 负责维护集群内所有服务的目录map;
  • 负责维护路由规则;

Router

  • 路由负责实现对一个服务进行规则匹配,例如进行灰度发布,集群下线等;

Cluster

  • 负责将一组invoke伪装成一个invoke来达到集群容错的目的;

失败策略

  • FailoverClsuter:失败重试
  • FailFastCluster:快速失败

降级策略
1)、容错

当服务出现超时,如果配置有降级策略则自动屏蔽所有服务端地址,将根据容错策略返回对应的结果-

2)、屏蔽

不发送服务端请求,直接返回mock值;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值