Dubbo服务暴露原理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nangeali/article/details/82633125

服务暴露原理

这里写图片描述

配置文件

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端口

猜你喜欢

转载自blog.csdn.net/nangeali/article/details/82633125