com+ system application 启动_dubbo启动引导过程(基于2.7.9)
前言
再百度或google上一搜索dubbo服務暴露過程 相關的文章已經有很多了,但是文章
基本都是基于老版本的dubbo,當你對著文章去看下載下來的代碼時,會發現很多東西對不上;出于此目的,我便有了自己根據新版本(就目前來講)的dubbo來寫一些關于我自己的理解,如果有不正確的地方,歡迎大家指出。此篇文章主要是我對dubbo服務啟動引導的理解,不包括服務暴露的過程。
準備
我們先將dubbo的源碼下載下來,地址是 https://github.com/apache/dubbo
啥都不說了,先run起來
- 啟動zookeeper
我們下載好代碼,直接用官方的demo來運行。不過呢,你要啟動zookeeper;當然,你啟動其他的注冊中心也可以,不啟動也可以,筆者這里使用的docker來啟動zookeeper,方便又干凈。
docker run -d -P zookeeper這樣我們就有了一個zookeeper的注冊中心。-P的含義是隨機綁定本機端口,你也可以指定端口,不熟悉docker的同學可以自行搜索下。接下來我們看一下zookeeper的端口號
docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e22afb746c2b zookeeper "/docker-entrypoint.…" 3 minutes ago Up 3 minutes 0.0.0.0:32783->2181/tcp, 0.0.0.0:32782->2888/tcp, 0.0.0.0:32781->3888/tcp, 0.0.0.0:32780->8080/tcp nifty_black可以看到zookeeper的2888綁定到了我機器的32782端口
另外,新版的dubbo的三大中心(注冊中心、配置中心、元數據中心)是分開的,我們也可以使用同一個zookeeper,為了簡單,我這里都用32782端口這個zookeeper了.
- 配置dubbo
我這里就先用dubbo-demo-xml-provider給大家做示范。將三大中心的zookeeper地址都改為zookeeper://127.0.0.1:32782,這樣我們的org.apache.dubbo.demo.provider.Application就可以run起來了。
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:dubbo="http://dubbo.apache.org/schema/dubbo"xmlns="http://www.springframework.org/schema/beans"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsdhttp://dubbo.apache.org/schema/dubbo http://dubbo.apache.org/schema/dubbo/dubbo.xsd"><dubbo:application metadata-type="remote" name="demo-provider"/><dubbo:metadata-report address="zookeeper://127.0.0.1:32782"/><dubbo:config-center address="zookeeper://127.0.0.1:32782"/><dubbo:registry address="zookeeper://127.0.0.1:32782"/><dubbo:protocol name="dubbo"/><bean id="demoService" class="org.apache.dubbo.demo.provider.DemoServiceImpl"/><dubbo:service interface="org.apache.dubbo.demo.DemoService" ref="demoService"/></beans>至此,我們的dubbo provider就可以成功啟動了
dubbo啟動過程
首先看一眼我們demo的main方法
public static void main(String[] args) throws Exception {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring/dubbo-provider.xml");context.start();System.in.read();}很明顯,我們demo啟動借助的spring。不過這段代碼是怎么知道要啟動dubbo的呢?它是在spring.handlers文件中加上了如下內容
http://dubbo.apache.org/schema/dubbo=org.apache.dubbo.config.spring.schema.DubboNamespaceHandler http://code.alibabatech.com/schema/dubbo=org.apache.dubbo.config.spring.schema.DubboNamespaceHandlerspring.handlers在哪里呢?這這里
- 注冊dubbo schemas的解析器
這點就不展開講了。在老版本的dubbo中,這個類的功能也只有這一個。
- 注冊DubboBootstrapApplicationListener
老版本的dubbo是通過ServiceBean繼承InitializingBean來實現的,而新版本的則有所改變。新版的dubbo在parse方法中調用了一個方法DubboBeanUtils#registerCommonBeans(BeanDefinitionRegistry registry)這個方法中有一行代碼如下
java registerInfrastructureBean(registry, DubboBootstrapApplicationListener.BEAN_NAME,DubboBootstrapApplicationListener.class);
- DubboBootstrapApplicationListener
DubboBootstrapApplicationListener繼承自OneTimeExecutionApplicationContextEventListener,而OneTimeExecutionApplicationContextEventListener繼承自ApplicationListener,DubboBootstrapApplicationListener實現了ApplicationListener的onApplicationEvent來監聽spring事件,當spring事件為ContextRefreshedEvent時,最終會調dubboBootstrap.start();
- DubboBootstrap
dubbo啟動引導程序,至此,dubbo服務的啟動交給了DubboBootstrap.
總結
老版本的dubbo是服務啟動是有ServiceBean負責的,ServiceBean通過繼承InitializingBean進而實現setApplicationContext方法,來啟動dubbo服務,而新版本的是從DubboNamespaceHandler中向spring注冊DubboBootstrapApplicationListener來監聽spring事件,當事件為ContextRefreshedEvent時,會啟調用DubboBootstrap#start來啟動dubbo服務。接下的的服務暴露等操作就交由DubboBootstrap去完成了。
總結
以上是生活随笔為你收集整理的com+ system application 启动_dubbo启动引导过程(基于2.7.9)的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 嬿字取名的寓意
- 下一篇: 五粮液和密令酒那个好
