dubbo 服务暴露过程
先发图镇楼
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<String, ExchangeServer> serverMap,调用server = Exchangers.bind(url, requestHandler); 得到一个ExchangeServer,它的子类有ExchangeClient和ExchangeServer2种,内部是通过HeaderExchanger得到的。
HeaderExchangeServer内部有一个server,默认是nettyServer,它是调用Transport生成的,即这部分
总体来说,就是DubboProtocol维护了HeaderExchangeServer,ExchangeServer维护了一个nettyServer。
nettyserver的父类AbstractEndpoint维护了一个codec2,即这部分
还是以dubbo协议为例,默认使用的是DubboCountCodec,它内部又使用了DubboCodec,encode和decode方法后获取
Serialization进行序列化和反序列化,CodecSupport.getSerialization(channel.getUrl()); 即这部分
上一篇: 详解链表的创建,插入,删除,遍历