Dubbo之服务消费原理
ytao丨杨滔 人气:2
![](https://img2020.cnblogs.com/other/1850167/202003/1850167-20200323114857120-253140754.png)
# 前言
上篇文章[《Dubbo之服务暴露》](https://ytao.top/2020/03/08/17-dubbo-reference/)分析 Dubbo 服务是如何暴露的,本文接着分析 Dubbo 服务的消费流程。主要从以下几个方面进行分析:**注册中心的暴露**;**通过注册中心进行服务消费通知**;**直连服务进行消费**。
服务消费端启动时,将自身的信息注册到注册中心的目录,同时还订阅服务提供方的目录,当服务提供方的 URL 发生更改时,实时获取新的数据。
# 服务消费端流程
下面是一个服务消费的流程图:
![](https://img2020.cnblogs.com/other/1850167/202003/1850167-20200323114857677-1387916966.jpg)
上图中可以看到,服务消费的流程与服务暴露的流程有点类似逆向的。同样,Dubbo 服务也是分为两个大步骤:第一步就是将远程服务通过`Protocol`转换成`Invoker`(概念在上篇文章中有解释)。第二步通过动态代理将`Invoker`转换成消费服务需要的接口。
`org.apache.dubbo.config.ReferenceConfig `类是`ReferenceBean`的父类,与生产端服务的`ServiceBean`一样,存放着解析出来的 XML 和注解信息。类关系如下:
![](https://img2020.cnblogs.com/other/1850167/202003/1850167-20200323114857926-1384778753.png)
# 服务初始化中转换的入口
当我们消费端调用本地接口就能实现远程服务的调用,这是怎么实现的呢?根据上面的流程图,来分析消费原理。
在消费端进行初始化时`ReferenceConfig#init`,会执行`ReferenceConfig#createProxy`来完成这一系列操作。以下为`ReferenceConfig#createProxy`主要的代码部分:
```java
private T createProxy(Map
加载全部内容