Dubbo服务暴露原理
服务暴露原理
配置文件
IOC容器启动,加载配置文件的时候
Dubbo标签处理器,解析每一个标签
封装成对应的组件
service
解析service标签
将service标签信息,封装成ServiceBean
ServiceBean
实现了两个重要机制
InitializingBean
Spring的接口
当组件创建完对象之后
会调用InitializingBean中的afterPropertiesSet方法
组件属性设置完成,会回调这个方法
ApplicationListener
应用监听器
监听IOC容器的刷新事件
当IOC容器中,所有对象都创建完成
会回调onApplicationEvent方法
Spring原理
ServiceBean在创建完对象之后
会调用afterPropertiesSet方法
IOC容器启动完成之后
会调用onApplicationEvent方法
afterPropertiesSet
设置beanClass的属性值
onApplicationEvent
当IOC容器刷新完成
如果,不是延迟的、是暴露的,没有暴露的
调用export方法,暴露服务
Export
暴露服务
调用doExport方法,执行暴露
doExport
执行暴露
调用doExportUrls方法,暴露URL地址
doExportUrls
读取注册中心地址,端口号
获取protocols协议,端口号
For循环
可以配置多个protocols标签
使用多个协议,暴露在多个端口
doExportUrlsFor1Protocol
注册服务到注册中心
Invoker
通过代理工厂,获取invoker
执行器,包装了执行者信息
包含了执行哪个对象、哪个方法、URL地址等
protocol.export
暴露invoker
Protocol
基于Java的SPI机制
获取类加载器,得到适配器
Protocol
Ctrl+T,查看依赖树
使用Dubbo协议暴露,注册到注册中心
使用DubboProtocol、RegistryProtocol
DubboProtocol
调用export方法
Export
DubboProtocol的export方法
RegistryProtocol
调用export方法
Export
RegistryProtocol的export方法
protocol.export(invoker)
首先,调用RegistryProtocol的export方法
将服务注册到注册中心
然后,调用DubboProtocol的export方法
启动Netty服务器,监听Dubbo协议端口
RegistryProtocol
export方法
doLocalExport方法,本地暴露
DubboProtocol
export方法
调用openServer方法
打开服务器
openServer
调用createServer方法
创建服务器
createServer
调用Exchangers.bind
绑定服务器、请求处理器
Exchangers.bind
调用getExchanger(url).bind
getExchanger(url).bind
调用Transporters.bind
传输器
Transporters.bind
调用getTransporter().bind
getTransporter().bind
调用底层的NettyTransporter
NettyTransporter
创建一个Netty服务器
openServer(url)
启动Netty服务器,监听20880端口
还没有评论,来说两句吧...