Dubbo消费端

作者: 昙花未现 | 来源:发表于2019-09-30 09:16 被阅读0次

Dubbo消费端可以让我们在调用远程服务时本身是无感知的,就像在本地调用方法一样。

消费端主要内容有配置初始化、服务订阅和创建代理对象。

消费端的核心类是ReferenceBean,ReferenceBean继承了ReferenceConfig类,实现了FactoryBean、InitializingBean、DisposableBean和ApplicationContextAware接口。

配置初始化相关

Dubbo核心类ReferenceConfig继承了AbstractReferenceConfig、AbstractInterfaceConfig、AbstractMethodConfig和AbstractConfig类。

AbstractConfig:配置解析的工具方法和公共方法。

AbstractMethodConfig:封装了配置文件标签中方法级别的相关属性。

AbstractInterfaceConfig:封装了配置文件标签中接口级别的相关属性。

AbstractReferenceConfig:封装了引用实例的默认配置,比如检查服务实例是否存在,是否使用泛化接口、版本号等。

ReferenceConfig:封装了全局配置,包括接口名、方法配置、默认配置等。

服务订阅和创建代理对象相关

服务订阅流程是先判断当前的服务是本地服务还是远程的;根据SPI找到对应的Protocol类,生成对应的URL协议;与注册中心进行交互,“watch”相应的节点。

Invoker代表一个可执行的对象,可以是本地执行类的Invoker,比如provider端的服务实现类,通过反射实现最终的方法调用。也可以是一个远程通信执行类的Invoker, consumer端通过接口与provider端进行远程通信,provider端利用本地Invoker执行相应的方法并返回结果。还可以是聚合Invoker, consumer调用端可以将多个Invoker聚合成一个Invoker执行操作。

Protocol是通信协议,默认的Protocol是DubboProtocol,通过Protocol创建Invoker对象,默认的也就是DubboInvoker。

RegistryProtocol用于服务注册和订阅,涉及以下几个关键类。

ZooKeeperRegistry:负责与ZooKeeper进行交互。

RegistryProtocol:从注册中心获取可用服务,或者将服务注册到ZooKeeper,然后提供服务或调用代理。

RegistryDirectory:维护所有可用的远程Invoker或本地的Invoker。这个类实现了NotifyListner。

NotifyListener:负责RegistryDirectory和ZooKeeperRegistry的通信。

FailbackRegistry:继承自Registry,实现了失败重试机制。

ProxyFactory对于Consumer端来说是通过ProxyFactory创建调用接口的代理对象,对于Provider端来说主要是包装本地执行的Invoker类。ProxyFactory接口的实现类有JdkProxyFactory和JavassistProxyFactory,而默认是JavassistProxyFactory。JdkProxyFactory是利用JDK自带的Proxy来动态代理目标对象的远程通信Invoker类。JavassistProxyFactory是利用Javassit字节码技术来创建的远程通信Invoker类。

在ZooKeeper中,Dubbo的节点为根节点,第二层为接口层存放服务类的全路径,第三层是服务提供者和服务消费者集合,第四层为各自的注册地址。

在RegistryProtocol类的refer方法中主要通过getRegistry方法获取ZooKeeperRegistry实例,并将ZooKeeperRegistry实例以参数的方式传入doRefer方法;通过FailbackRegistry实例的register方法调用ZooKeeperRegistry实例的doRegister方法实现消费者的地址注册;通过FailbackRegistry实例的subscribe方法调用ZooKeeperRegistry实例的doSubscribe方法实现订阅服务;接着返回默认的集群和容错Invoker实例,最终会使用InvokerInvocationHandler将服务接口包装成一个代理类并返回。我们在调用服务接口的时候就会触发代理类,通过代理类实现服务路由、服务选取,以及与服务提供者Provider端的远程通信,这些过程服务调用者是无法感知的,就像在应用中调用本地方法一样简单。

相关文章

  • Dubbo消费端

    Dubbo消费端可以让我们在调用远程服务时本身是无感知的,就像在本地调用方法一样。 消费端主要内容有配置初始化、服...

  • Dubbo服务端

    Dubbo服务端的主要功能就是服务提供端向注册中心注册服务,这样消费端能够从注册中心获取相应的服务。 Dubbo ...

  • dubbo消费端调用

    消费端调用的过程 调用链 关键方法 InvokerInvocationHandler#invoke 根据服务消费知...

  • dubbo 小结

    dubbo soa,rpc框架 提供服务和消费端模式 简单流程 provider 注册服务到zookeper,消费...

  • dubbo中的Filter链原理及应用

    filter在dubbo中的应用非常广泛,它可以对服务端、消费端的调用过程进行拦截,从而对dubbo进行功能上的扩...

  • dubbo空指针问题

    最近公司生产环境(SpringBoot + Dubbo)中,消费端在service中,部分使用@Reference...

  • 这里有一道Dubbo高频面试题+解析,请注意查收

    一道面试题 让我们开门见山,直面主题:Dubbo 服务里面有个服务端,还有个消费端你知道吧? 服务端和消费端都各有...

  • 这里有一道Dubbo高频面试题+解析,请注意查收!

    一道面试题 让我们开门见山,直面主题:Dubbo 服务里面有个服务端,还有个消费端你知道吧? 服务端和消费端都各有...

  • dubbo的负载均衡,是在服务端还是客户端?在服务端也在客户端

    dubbo的负载均衡机制原理上来说是客户端负载均衡,也就是dubbo消费者客户端根据服务提供者列表进行算法分配,来...

  • Dubbo剖析-服务降级

    一、前言 dubbo提供了一些服务降级措施,当服务提供端某一个非关键的服务出错时候,dubbo可以对消费端的调用进...

网友评论

    本文标题:Dubbo消费端

    本文链接:https://www.haomeiwen.com/subject/csdcpctx.html