Dubbo服务注册过程浅析
关于dubbo如何实现服务注册过程,本文起到抛砖引玉的作用,欢迎大家积极讨论。
首先用一张dubbo官网的图来作为本次博文的开始

一、dubbo服务注册的整体流程
- ProxyFactory.getInvoker(ref)得到Invoker
- Protocol.export(Invoker)得到Exporter
- Registry.createRegister(Exporter)注册到注册中心,提供服务。
二、源码解析注册流程
1.测试main方法
package wsd.com.dubbo_provider; import com.alibaba.dubbo.config.ApplicationConfig; import com.alibaba.dubbo.config.ProtocolConfig; import com.alibaba.dubbo.config.RegistryConfig; import com.alibaba.dubbo.config.ServiceConfig; import wsd.com.dubbo_provider.interfaces.HelloService; import wsd.com.dubbo_provider.interfaces.impl.HelloServiceImpl; public class App { public static void main( String[] args ) throws InterruptedException { HelloService greetingService = new HelloServiceImpl(); ApplicationConfig applicationConfig = new ApplicationConfig(); applicationConfig.setName("dubbo-demo-provider"); RegistryConfig registryConfig = new RegistryConfig(); registryConfig.setProtocol("zookeeper"); registryConfig.setAddress("10.88.9.116:2181"); registryConfig.setClient("zkclient"); registryConfig.setFile("~/dubbo/registry.cache"); ProtocolConfig protocolConfig = new ProtocolConfig(); protocolConfig.setName("dubbo"); protocolConfig.setPort(20880); protocolConfig.setThreadpool("cached"); protocolConfig.setThreads(100); ServiceConfig<HelloService> serviceConfig = new ServiceConfig<HelloService>(); serviceConfig.setApplication(applicationConfig); serviceConfig.setRegistry(registryConfig); serviceConfig.setProtocol(protocolConfig); serviceConfig.setInterface(HelloService.class); serviceConfig.setRef(greetingService); serviceConfig.setVersion("1.0.0"); serviceConfig.setGroup("dubbo"); serviceConfig.setTimeout(3000); serviceConfig.setRetries(2); serviceConfig.setLoadbalance("random"); serviceConfig.setActives(10); serviceConfig.setOwner("wsd"); serviceConfig.export(); Thread.currentThread().join(); } }
2.ServiceConfig.export()
public synchronized void export() { if (provider != null) { if (export == null) { export = provider.getExport(); } if (delay == null) { delay = provider.getDelay(); } } if (export != null && ! export.booleanValue()) { return; } if (delay != null && delay > 0) { Thread thread = new Thread(new Runnable() { public void run() { try { Thread.sleep(delay); } catch (Throwable e) { } doExport(); } }); thread.setDaemon(true); thread.setName("DelayExportServiceThread"); thread.start(); } else { doExport(); } }
3. ServiceConfig.doExport().doExportUrls()
4.ServiceConfig.doExport().doExportUrls().loadRegistries(true)

5.ServiceConfig.doExport().doExportUrls()..doExportUrlsFor1Protocol(protocolConfig,RegistryUrls)



总结
关于JavassistProxyFactory.getInvoker,RegistryProtocol.export(invoker)下一篇文章在做详细解析。
posted on 2019-01-08 15:34 sunflower_wsd 阅读(375) 评论(0) 收藏 举报
浙公网安备 33010602011771号