Dubbo原始碼之服務引用
ReferenceBean.getObject()
-->ReferenceConfig.get()
-->init()
-->createProxy(map)
-->refprotocol.refer(interfaceClass, urls.get(0))
-->ExtensionLoader.getExtensionLoader(Protocol.class).getExtension("registry");
-->extension.refer(arg0, arg1);
-->ProtocolFilterWrapper.refer
-->RegistryProtocol.refer
-->registryFactory.getRegistry(url)//建立zk的連線,和服務端釋出一樣(省略程式碼)
-->doRefer(cluster, registry, type, url)
-->registry.register//建立zk的節點,和服務端釋出一樣(省略程式碼)。節點名為:dubbo/com.alibaba.dubbo.demo.DemoService/consumers
-->registry.subscribe//訂閱zk的節點,和服務端釋出一樣(省略程式碼)。 /dubbo/com.alibaba.dubbo.demo.DemoService/providers,
/dubbo/com.alibaba.dubbo.demo.DemoService/configurators,
/dubbo/com.alibaba.dubbo.demo.DemoService/routers]
-->notify(url, listener, urls);
-->FailbackRegistry.notify
-->doNotify(url, listener, urls);
-->AbstractRegistry.notify
-->saveProperties(url);//把服務端的註冊url資訊更新到C:\Users\bobo\.dubbo\dubbo-registry-192.168.48.117.cache
-->registryCacheExecutor.execute(new SaveProperties(version));//採用執行緒池來處理
-->listener.notify(categoryList)
-->RegistryDirectory.notify
-->refreshInvoker(invokerUrls)//重新整理快取中的invoker列表
-->destroyUnusedInvokers(oldUrlInvokerMap,newUrlInvokerMap); // 關閉未使用的Invoker
-->最終目的:重新整理Map<String, Invoker<T>> urlInvokerMap 物件
重新整理Map<String, List<Invoker<T>>> methodInvokerMap物件
-->cluster.join(directory)//加入叢集路由
-->ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.cluster.Cluster.class).getExtension("failover");
-->MockClusterWrapper.join
-->this.cluster.join(directory)
-->FailoverCluster.join
-->return new FailoverClusterInvoker<T>(directory)
-->new MockClusterInvoker
-->proxyFactory.getProxy(invoker)//建立服務代理
-->ProxyFactory$Adpative.getProxy
-->ExtensionLoader.getExtensionLoader(com.alibaba.dubbo.rpc.ProxyFactory.class).getExtension("javassist");
-->StubProxyFactoryWrapper.getProxy
-->proxyFactory.getProxy(invoker)
-->AbstractProxyFactory.getProxy
-->getProxy(invoker, interfaces)
-->Proxy.getProxy(interfaces)//目前代理物件interface com.alibaba.dubbo.demo.DemoService, interface com.alibaba.dubbo.rpc.service.EchoService
-->InvokerInvocationHandler// 採用jdk自帶的InvocationHandler,建立InvokerInvocationHandler物件。
灰度釋出例子:
provider 192.168.100.38 192.168.48.32
1.釋出192.168.48.32,切斷192.168.48.32訪問流量,然後進行服務的釋出。
2.192.168.48.32釋出成功後,恢復 192.168.48.32的流量,
3.切斷192.168.100.38,繼續釋出 192.168.100.38
相關文章
- Dubbo原始碼分析之服務引用原始碼
- Dubbo原理和原始碼解析之服務引用原始碼
- dubbo原始碼分析02:服務引用原始碼
- Dubbo原始碼分析(三)Dubbo的服務引用Refer原始碼
- Dubbo原始碼分析之服務暴露原始碼
- Dubbo原始碼分析(六)服務引用的具體流程原始碼
- Dubbo原始碼解析之服務叢集原始碼
- Dubbo原始碼解析之服務引入過程原始碼
- Dubbo原始碼解析之服務呼叫過程原始碼
- Dubbo原始碼之服務端的釋出原始碼服務端
- Dubbo原始碼學習之-服務匯出原始碼
- dubbo--5服務引用
- Dubbo原始碼解析之服務端接收訊息原始碼服務端
- Dubbo原始碼解析之服務匯出過程原始碼
- dubbo服務者原始碼分期原始碼
- Dubbo服務暴露原始碼解析②原始碼
- Dubbo原始碼解析之服務釋出與註冊原始碼
- Dubbo原始碼分析十一、服務路由原始碼路由
- Dubbo原始碼分析(五)Dubbo呼叫鏈-服務端原始碼服務端
- Dubbo原始碼分析(七)服務目錄原始碼
- Dubbo服務呼叫過程原始碼解析④原始碼
- Dubbo原始碼解析之客戶端初始化及服務呼叫原始碼客戶端
- 阿里面試:dubbo的服務引用過程阿里面試
- Dubbo2.7.3版本原始碼學習系列六: Dubbo服務匯出原始碼解析原始碼
- dubbo原始碼分析之服務呼叫方發起呼叫(入口InvokerInvocationHandler.invoke)原始碼
- 一張圖看懂Dubbo服務引用全過程
- Dubbo原始碼解析之SPI原始碼
- Dubbo之SPI原始碼分析原始碼
- Dubbo原始碼分析(四)服務暴露的具體流程(上)原始碼
- Dubbo原始碼分析(五)服務暴露的具體流程(下)原始碼
- 聊聊Dubbo(九):核心原始碼-服務端啟動流程2原始碼服務端
- 聊聊Dubbo(九):核心原始碼-服務端啟動流程1原始碼服務端
- Dubbo之限流TpsLimitFilter原始碼分析MITFilter原始碼
- Dubbo原始碼學習之-通過原始碼看看dubbo對netty的使用原始碼Netty
- Dubbo系列之 (四)服務訂閱(1)
- Dubbo系列之 (六)服務訂閱(3)
- Dubbo系列之 (五)服務訂閱(2)
- Dubbo原始碼解析之SPI機制原始碼