深度剖析ApacheDubbo核心技术内幕
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.2 Dubbo远程调用细节

本节我们先从整体来看看Dubbo服务发布与消费的概要流程,以便对其中涉及的概念有个了解,更详细的过程后面的章节会具体讲解。

2.2.1 服务提供者暴露一个服务的概要过程

图2.2是服务提供者暴露一个服务的概要过程。

图2.2

首先,ServiceConfig类引用对外提供服务的实现类ref(如GreetingServiceImpl),然后通过ProxyFactory接口的扩展实现类的getInvoker()方法使用ref生成一个AbstractProxyInvoker实例,到这一步就完成了具体服务到Invoker的转化。接下来就是Invoker转换到Exporter的过程。Dubbo协议的Invoker转为Exporter发生在DubboProtocol类的export()方法中,Dubbo处理服务暴露的关键就在Invoker转换到Exporter的过程中,在这个过程中会先启动Netty Server监听服务连接,然后将服务注册到服务注册中心。

2.2.2 服务消费者消费一个服务的概要过程

图2.3为服务消费者消费一个服务的概要过程。

图2.3

首先ReferenceConfig类的init()方法调用Protocol扩展接口实现类的refer()方法生成Invoker实例(如图2.3中的左上角部分),这是服务消费的关键。接下来把Invoker转换为客户端需要的接口(如GreetingService)。

Dubbo协议的Invoker转换为客户端需要的接口,发生在ProxyFactory接口的扩展实现类的getProxy()方法中,它主要是使用代理对服务接口的调用转换为对Invoker的调用。