dubbo原始碼分析-服務匯出(二)
阿新 • • 發佈:2019-03-06
## 建立註冊中心
服務註冊操作對於 Dubbo 來說不是必需的,通過服務直連的方式就可以繞過註冊中心。但通常我們不會這麼做,直連方式不利於服務治理,僅推薦在測試服務時使用。對於 Dubbo 來說,註冊中心雖不是必需,但卻是必要的。
在dubbo-config.xml配置註冊中心,指定zookeeper作為註冊中心實現方式
```
<!-- zookeeper註冊中心--> <dubbo:registry protocol="zookeeper" address="${dubbo.registry.address}" check="false" port="${dubbo.protocol.port}"> <dubbo:parameter key="qos.enable" value="false"/> </dubbo:registry>
```
在RegistryProtocal中註冊過程在export方法
```
public <T> Exporter<T> export(Invoker<T> originInvoker) throws RpcException { RegistryProtocol.ExporterChangeableWrapper<T> exporter = this.doLocalExport(originInvoker); URL registryUrl = this.getRegistryUrl(originInvoker); Registry registry = this.getRegistry(originInvoker); URL registedProviderUrl = this.getRegistedProviderUrl(originInvoker); boolean register = registedProviderUrl.getParameter("register", true); ProviderConsumerRegTable.registerProvider(originInvoker, registryUrl, registedProviderUrl); //服務註冊到註冊中心 if (register) { this.register(registryUrl, registedProviderUrl); ProviderConsumerRegTable.getProviderWrapper(originInvoker).setReg(true); } URL overrideSubscribeUrl = this.getSubscribedOverrideUrl(registedProviderUrl); RegistryProtocol.OverrideListener overrideSubscribeListener = new RegistryProtocol.OverrideListener(overrideSubscribeUrl, originInvoker); this.overrideListeners.put(overrideSubscribeUrl, overrideSubscribeListener); registry.subscribe(overrideSubscribeUrl, overrideSubscribeListener); return new RegistryProtocol.DestroyableExporter(exporter, originInvoker, overrideSubscribeUrl, registedProviderUrl); }
```
register方法如下
```
public void register(URL registryUrl, URL registedProviderUrl) { Registry registry = this.registryFactory.getRegistry(registryUrl); registry.register(registedProviderUrl); }