image.png

服务提供者暴露

所谓的服务提供者暴露,主要就是指在项目启动时服务提供者去做的两件事

第一件事就是,由于需要对外提供调用服务,接受消费者的请求

所以在启动时需要根据使用协议,以及协议对应的端口启动一个对应的服务

就拿前面DemoService来举例,由于@DubboService注解没有指定任何信息

所以DemoService默认就是使用Dubbo框架自己写的通信协议,也就是Dubbo协议,这个协议默认使用的端口就是20880

之后如果要调用DemoService的方法时,就可以按照Dubbo协议要求组装数据格式

向20880端口发送请求,从而就实现远程服务调用,如下图所示:

当然除了默认的Dubbo协议之外,Dubbo还支持其它的通信协议,后面会详细介绍

虽然第一件事成功让接口可以对外提供访问,但是对于消费者来说,它其实还是无法访问接口

因为消费者并不知道接口使用的是哪个通信协议、端口,也不知道接口所在的服务器的ip

于是,在启动时就会去做第二件事

第二件事是将每个接口的详细信息,包括接口的全限定名、方法名称、方法参数、服务器的ip、端口、通信协议等等按照一定的格式组装好

存放到元数据中心和服务提供者本地缓存中

注意这是3.x版本时的存储情况,跟2.x有点不同。并且元数据中心其实就是使用Nacos或者Zookeeper来实现的,所以你可以认为就是存储在Nacos或者Zookeeper中

之后消费者需要调用接口时,就可以从元数据中心或者服务提供者本地缓存中获取到接口的详细信息(具体从哪取决于配置,默认是从本地缓存中获取)