dubbo 服务暴露过程

先发图镇楼

dubbo 服务暴露过程_第1张图片

serviceconfig#doExportUrlsFor1Protocol方法会先做一个代理,ref就是业务实现类,

Invoker invoker = proxyFactory.getInvoker(ref, (Class) interfaceClass, registryURL.addParameterAndEncoded(Constants.EXPORT_KEY, url.toFullString()));

使用代理 javassist或者jdk代理转换成一个invoker,即这部分


接下来会使用protocol.export(wrapperInvoker); 将invoker转换成exporter,

注意一下ServiceConfig里面的protocol是ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();

返回的结果是protocol&Adaptive ->protocolListenerWraper->protocolFilterWraper->DubboProtocol 

protocolFilterWraper#export方法会调用buildInvokerChain,即这部分


DubboProtocol的export方法将invoker转换成了exporter,然后返回,即这部分


DubboProtocol内部维护了一个Map serverMap,调用server = Exchangers.bind(url, requestHandler); 得到一个ExchangeServer,它的子类有ExchangeClient和ExchangeServer2种,内部是通过HeaderExchanger得到的。

HeaderExchangeServer内部有一个server,默认是nettyServer,它是调用Transport生成的,即这部分


总体来说,就是DubboProtocol维护了HeaderExchangeServer,ExchangeServer维护了一个nettyServer。

dubbo 服务暴露过程_第2张图片

nettyserver的父类AbstractEndpoint维护了一个codec2,即这部分


还是以dubbo协议为例,默认使用的是DubboCountCodec,它内部又使用了DubboCodec,encode和decode方法后获取

Serialization进行序列化和反序列化,CodecSupport.getSerialization(channel.getUrl()); 即这部分




你可能感兴趣的:(dubbo)