在上一节中写到,dubbo中netty服务暴露是通过下面代码来实现的:
final ExporterChangeableWrapper<T> exporter = doLocalExport(originInvoker);
进入RegistryProtocol的doLocalExport方法:
进入protocol的export方法
最终进入DubboProtocol的export方法
serviceKey(url)的目的是组装key=com.alibaba.dubbo.demo.DemoService:20880
进入openServer(url)这个方法:
key的值就是ip加端口号,保证netty只启动一次。
进入createServer(URL url)这个方法:
exchanger是一个信息交换层,进入Exchangers.bind方法:
其中getExchanger(url)获得HeaderExchanger的一个对象,进入HeaderExchanger的bind方法:
进入Transporters.bind方法
其中getTransporter()方法是通过dubbo的spi返回Transporter$Adpative动态类的一个对象,进入其bind方法:
进入NettyTransporter的bind方法:
进入AbstractServer的 doOpen方法,这个方法的作用就是启动netty