Dubbo是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。简单的说,dubbo就是个服务框架,如果没有分布式的需求,其实是不需要用的,只有在分布式的时候,才有dubbo这样的分布式服务框架的需求,并且本质上是个服务调用的东东,说白了就是个远程服务调用的分布式框架(告别Web Service模式中的WSdl,以服务者与消费者的方式在dubbo上注册)
前面讲到dubbo spi机制 这篇主要将如何发布服务
配置文件
DubboBeanDefinitionParser 解析dubbo-server1.xml 文件 注入多大屏ioc容器中 被spring容器管理
ServiceBean 中的 export方法
再到 ServiceConfig doExport() 方法
doExportUrls()方法
protocol.export() 方法 当前用到了扩展点 dubbo spi机制
private static final Protocol protocol =(Protocol)ExtensionLoader.getExtensionLoader(Protocol.class).getAdaptiveExtension();
注意这里的protocol 返回的是 RegisterProtocol 中的export()
DubboProtocol
Exchangers 类 bind方法
HeaderExchanger bind()
Transporters bind方法
NettyTransporter bind方法
NettyServer doOpen 方法 真正的发布服务
从 RegisterProtocol - > Dubbo$Protocol -> ProtocolFilterWrapper -> ProtocolListenerWrapper -> DubboProtocol -> Exchangers -> HeaderExchanger -> Transporters -> NettyTransporter -> NettyServer 服务发布 并注册到注册中心