服务提供者在框架启动时,会初始化服务实例,通过proxy组件调用具体的协议,把服务端要暴露的接口封装成invoker,然后转换成Exporter,这个时候框架会打开服务端口等并记录服务实例到内存中,最后通过Registry把服务元数据注册到注册中心,这就是服务提供者整个的接口暴露的过程。
下面分别介绍一下几个组件:
Proxy组件:dubbo中只需要引用一个接口就可以调用远程的服务,并且只需要像调用本地方法一样调用即可,其实是Dubbo框架为我们生成了代理类,调用的方法其实是Proxy组件生成的代理方法,会自动发起远程或者本地调用,并返回结果,整个过程对用户透明。
Protocal组件:协议就是对数据格式的一种约定,它可以把我们对接口的配置,根据不同的协议转换成不同的invoker对象,例如:用DubboProtocal可以把XML文件中一个远程接口的配置转换为一个DubboInvoker.
Exporter:用于暴露到注册中心的对象,它的内部属性持有了Invoker对象,我们可以认为他在Invoker上包了一层。
Registry:把Exportor注册到注册中心。
以上就是整个服务暴露的过程,消费方在启动时会通过Registry在注册中心订阅服务端的元数据(包括IP和端口)。这样就可以得到刚才暴露的服务了。