dubbo时序图整理
2020-02-28 10:45:28 9 举报
dubbo时序图
作者其他创作
大纲/内容
export()
RegistryFactory$Adaptive
register()
AbstractRegistryFactory
openService()
doRefer()
new NettyClient()
ZookeeperRegistryFactory
Filter/Listener
refer()
join()
DubboProtocol
服务端发布服务过程
前期准备阶段1. 上面三个方法:主要为了拼接参数2. export:判断服务是否打开,是否延迟等3. doExport:校验参数,如果为null,则初始化4. doExportUrls: 1. loadRegisteries:拼接参数到registryUrl(解析配置的标签:<dubbo:registry />span style=\"font-size: inherit;\
AbstractRegistry
serverMap.put(service)
HeaderExchanger
setApplicationContext()afterPropertiesSet()onApplicationEvnent()
打开Netty,建立网路通信1. openServer :用于 Netty 服务端启动2. createServer:创建 server 后添加到 serverMap 中3. bind:将暴露的接口+DubboExporter进行关联放入map中进行缓存4. 后面三个方法:将NettyServer转为ExchangeServer放入map中进行缓存
ProxyFactory$Adaptive
notify()
ZookeeperRegistry
前期准备1. afterProertiesSet:变量数据的初始化2. getObject:获取实例3. get:判断ref是否为null,如果不是null则进入下一个方法4. init:如果这个dubbo服务类还没有被实例化,会先调用ReferenceConfig.init方法进行实例化 checkDefault:获取消费者全局配置 appendProperties:从jvm运行变量里面取相应的值写到consumer里面 createProxy:生成一个dubbo服务代理类
toInvokers()
registry.subscribe()
invoker(AbstractProxyInvoker)
ReferenceBean
Protocol$Adaptive
doNotify()
invoker = MockClusterInvoker(FailoverClusterInvoker)
FailoverCluster
消费端消费过程
subscribe()
createRegistry()
连接注册中心,并获取Registry实例,并将url发布到注册中心的节点上1. getRegistry:连接注册中心,返回注册中心实例2. createRegistry:创建注册中心实例3. getRegistedProviderUrl:获取注册到注册中心的urlspan style=\"font-weight: normal;\
Exchanger$Adaptive
refer()
bind()
NettyTransporter
ServiceConfig
doExportUrlsFor1Protocol()
FailbackRegistry
RegistryDirectory
createProxy()
注册中心的订阅及Invoker创建1. subscribe:订阅服务提供者2. doSubscribe:向服务端发送订阅请求3. notify:服务订阅完之后通知4. refreshInvoker:重建invoker实例5. toInvokers:providerurl转成具体的invoker6. protocol.refer:因为我们传过来的协议是dubbo,所以使用的最后处理的就是DubboProtocol,当然少不了的是warpper类的包裹,这个和export是一致的7.
refreshInvoker()
Invoker转换为Exporter1. ProxyFactory.getInvoker:这里用到了Dubbo SPI(后面会细说)由于spi标签中指定了默认(javassistProxyFactory),所以跳转到了javassistProxyFactory2. JavaassistProxyFactory.getInvoker:这里将proxy通过字节码生成wrapper,然后将wrapper封装到Invoker中(本地暴露的url是以“injvm”开头),如果是本地调用exportLocal方法(略)远程调用export方法3. export:将 Invoker 转为 Exporter4. doLocalExport:doLocalExport() 用 ExporterChangeableWrapper 代理类包装了 protocol.export() 方法返回的 exporter 对象,最后放到了 bounds 集合中缓存。 5. DubboPrtocol.export:创建 exporter 对象
getProxy()
watcher机制循环执行
getRegistry()
zkClient.create()
组装invoker,与zk建立连接1. refer:组装了一个Invoker对象,通过proxyFactory.getProxy(invoker)生成一个代理(dubbo默认使用了javassist)2. getRegistry:通过url中的协议创建相应的注册中心实例3. register:把Consumer注册到注册中心sonsumers目录下4. subscribe:订阅和监听configurators,providers,routers目录
createService()
Exchangers
get()
getRegistedProviderUrl
Invoker获取及集群1. join:通过FailFastCluster获取并返回远程代理Invoker2. getProxy:获取动态代理工厂3. new InvokerInvocationHandler(invoker):生成动态代理类
registry
doExportUrls() loadRegistries()
RegistryProtocol
init()
doRegistry()
afterPropertiesSet()
MockClusterWrapper
getInvoker()
zkClient = zookeeperTransporter.connect()
AbstractProxyFactory
JavassistProxyFactory
ReferenceConfig
getObject()
Proxy0 = Proxy.getProxy(interfaces).newInstance(new InvokerInvocationHandler(invoker))
StubProxyFactoryWrapper
invoker
Transporter$Adaptive
doExport()
ServiceBean
methodInvokerMap = invokers
doSubscribe()
invoker = ProtocolFilterWrapper$1(ListenerInvokerWrapper(DubboInvoker()))
new HeaderExchangeServer()
doLocalExport
Cluster$Adaptive
0 条评论
回复 删除
下一页