dubbo源码解析(八) dubbo中的netty使用

在上一节中写到,dubbo中netty服务暴露是通过下面代码来实现的:
final ExporterChangeableWrapper exporter = doLocalExport(originInvoker);

进入RegistryProtocol的doLocalExport方法:

dubbo源码解析(八) dubbo中的netty使用_第1张图片

进入protocol的export方法

dubbo源码解析(八) dubbo中的netty使用_第2张图片

最终进入DubboProtocol的export方法

dubbo源码解析(八) dubbo中的netty使用_第3张图片

serviceKey(url)的目的是组装key=com.alibaba.dubbo.demo.DemoService:20880


进入openServer(url)这个方法:

dubbo源码解析(八) dubbo中的netty使用_第4张图片

key的值就是ip加端口号,保证netty只启动一次。

进入createServer(URL url)这个方法:

dubbo源码解析(八) dubbo中的netty使用_第5张图片

exchanger是一个信息交换层,进入Exchangers.bind方法:

dubbo源码解析(八) dubbo中的netty使用_第6张图片

其中getExchanger(url)获得HeaderExchanger的一个对象,进入HeaderExchanger的bind方法:

dubbo源码解析(八) dubbo中的netty使用_第7张图片

进入Transporters.bind方法

dubbo源码解析(八) dubbo中的netty使用_第8张图片

其中getTransporter()方法是通过dubbo的spi返回Transporter$Adpative动态类的一个对象,进入其bind方法:

dubbo源码解析(八) dubbo中的netty使用_第9张图片

进入NettyTransporter的bind方法:

dubbo源码解析(八) dubbo中的netty使用_第10张图片

进入AbstractServer的 doOpen方法,这个方法的作用就是启动netty

dubbo源码解析(八) dubbo中的netty使用_第11张图片

dubbo源码解析(八) dubbo中的netty使用_第12张图片


你可能感兴趣的:(dubbo源码解析(八) dubbo中的netty使用)