Dubbo源码解析

 Dubbo的大体调用流程:

  1. 服务方启动时,初始化提供给消费方的服务,并将这些服务信息注册到注册中心,并开启通信监听。
  2. 消费者启动时,会从注册中心订阅消费的信息,并初始化要消费的接口。
  3. 消费者调用远程服务时会根据一定的算法选择一个远程服务来进行调用,调用的时候会将调用信息封装传给服务端,服务端在拿到消费方传的信息执行本地方法后,将结果返给消费方。

Dubbo的详细调用流程

      服务方的初始化

  1. 服务方在初始化的时候,ServiceConfig.expot()会读取配置信息并对配置信息作出一些列的判断,并收集信息。
  2. 将收集到的信息交给JavassistProxyFactory生成一个Invoke实例,这个Invoke的doInvoke方法会利用反射来执行服务类的真正方法。Invoke屏蔽了提供服务类的差异性,避免了远程调用对服务类的侵入,降低了二者的耦合性,可以将Invoke看做是服务的代理处理器。
  3. 将Invoke交给RegistryProtocol,RegistryProtocol会将Invoke交给DubboProtocol来进行本地暴露和开启netty连接。本地暴露就是将Invoke封装成Exporter,将Exporter作为value,url中的接口名,版本号,组名等信息组装成key,存入到map中,这样就能当消费者调用服务者的时候,服务者就能根据消费者传过来的Invocation拿到key,然后根据key找到invoke,来执行相应的实现类。但是是那个来通过Invokation来找到相应的invoke呢,是ExchangeHandler。在DubboProtocol中,会将key和ExchangeServer以k-v的形式存入到map中,ExchangeServer相当于是进入到信息交换层,ExchengeServer封装了netty通信这一层。所有的ip和端口号一样的都是交由同一个ExchangServer来执行。ExchangServer包裹着ExchangeHandler。真正的netty通信是在nettyHandler这个类里面执行的。
  4. RegistryProtocol根据配置信息连接注册中心,并将配置的服务注册到注册中心和订阅注册中心,当注册中心有服务的覆盖配置进来的时候,会监听到新的配置并重新暴露。
  5. 消费者在启动时候会拿到注册中心服务方在注册中心注册的信息,

1.服务方的初始化过程

è¿éåå¾çæè¿°

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值