dubbo解析-ServiceRepository功能及属性详解

本文基于dubbo 2.7.5版本代码

ServiceRepository是存储了所有服务端发布的服务、客户端需要访问的服务,通过ServiceRepository可以获取所有本dubbo实例发布的服务和引用的服务。
ServiceRepository是通过ApplicationModel.getServiceRepository方法创建或者获取的。
里面包括三个字段:services、consumers、providers。作用分别是:

services:类型是ConcurrentMap<String, ServiceDescriptor>,key是远程服务的接口名,ServiceDescriptor是服务描述符对象,ServiceDescriptor记录了服务接口的Class对象,接口名,服务接口每个方法的名字、入参类型、返回值类型等详细信息,ServiceDescriptor可以理解为记录了远程服务接口的详细描述。客户端、服务端在启动的时候都会调用ServiceRepository.registerService方法将ServiceDescriptor对象注册到services中。下面两个属性需要的ServiceDescriptor对象也是从services中获取的。

consumers:类型是ConcurrentMap<String, ConsumerModel>,key是serviceKey,serviceKey是由服务接口+“:”+group+“:”+version组成的,ConsumerModel中也有serviceKey,除了serviceKey之外还有ServiceDescriptor、ReferenceConfig对象、MethodConfig配置信息、可以访问远程服务提供者的Invoker对象。在客户端启动的时候,dubbo会调用ReferenceConfig的init方法,在init方法里面调用ServiceRepository.registerConsumer方法,该方法会创建ConsumerModel对象,并将其注册到ServiceRepository中。之后,dubbo可以访问该consumers属性,获取所有的客户端需要访问的远程服务信息。

providers:类型是ConcurrentMap<String, ProviderModel>,key是serviceKey,serviceKey是由服务接口+“:”+group+“:”+version组成的,ProviderModel中也有serviceKey,除了serviceKey之外还有ServiceDescriptor、ServiceConfig对象以及对外提供服务的spring bean对象。在服务端启动暴露服务的时候,dubbo会调用ServiceConfig的doExportUrls方法,在doExportUrls方法里面调用ServiceRepository.registerProvider方法,该方法会创建ProviderModel对象,并将其注册到ServiceRepository中。之后,dubbo可以访问该providers属性,获取所有服务端发布的服务信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值