Dubbo服務的運行方式: java
一、使用Servlet容器運行(Tomcat、Jetty等)----不可取 spring
缺點:增長複雜性(端口、管理) 浪費資源(內存)apache
官方:服務容器是一個standalone的啓動程序,由於後臺服務不須要Tomcat或JBoss等Web容器的功能,若是硬要用Web容器去加載服務提供方,增長複雜性,也浪費資源。app
二、自建Main方法類來運行(Spring容器) ----不建議(本地調試可用) 框架
缺點: Dobbo自己提供的高級特性沒用上 自已編寫啓動類可能會有缺陷 eclipse
官方:服務容器只是一個簡單的Main方法,並加載一個簡單的Spring容器,用於暴露服務。maven
三、使用Dubbo框架提供的Main方法類來運行(Spring容器)----建議使用 分佈式
優勢:框架自己提供(com.alibaba.dubbo.container.Main) 學習
可實現優雅停機(ShutdownHook) ui
官方:服務容器的加載內容能夠擴展,內置了spring, jetty, log4j等加載,可經過Container擴展點進行擴展
Dubbo是經過JDK的ShutdownHook來完成優雅停機的,因此若是用戶使用"kill -9 PID"等強制關閉指令,是不會執行優雅停機的,只有經過"kill PID"時,纔會執行。
原理:
設置優雅停機超時時間,缺省超時時間是10秒:(超時則強制關閉)
< dubbo:application ...> < dubbo:parameter key = "shutdown.timeout" value = "60000" /> <!-- 單位毫秒 --> </ dubbo:application > 若是ShutdownHook不能生效,能夠自行調用: ProtocolConfig.destroyAll(); 打包 : 傳統的打jar包,大部分人員還在使用eclipse自帶的導出一個jar包,對於傳統的單實例項目是沒有問題的,但對於比較複雜的maven分模塊項目,這種作法就不行了。 下面介紹maven打包方式: <resources> <resource> <targetPath>${project.build.directory}/classes</targetPath> <directory>src/main/resources</directory> <filtering>true</filtering> <includes> <include>**/*.xml</include> <include>**/*.properties</include> </includes> </resource> <!-- 結合com.alibaba.dubbo.container.Main,須要重點掌握--> <resource> <targetPath>${project.build.directory}/classes/META-INF/spring</targetPath> <directory>src/main/resources/spring</directory> <filtering>true</filtering> <includes> <include>spring-context.xml</include> </includes> </resource> </resources> 官網聲明: Spring Container
-
自動加載META-INF/spring目錄下的全部Spring配置。
-
配置:(配在java命令-D參數或者dubbo.properties中)
-
dubbo.spring.config=classpath*:META-INF/spring/*.xml ----配置spring配置加載位置 因此聲明必須使用maven方式配置才能將spring配置文件打包到META-INF/spring目錄下
引入相關插件: <plugins> <!-- 打包jar文件時,配置manifest文件,加入lib包的jar依賴 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <classesDirectory>target/classes/</classesDirectory> <archive> <manifest> <mainClass>com.alibaba.dubbo.container.Main</mainClass> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> <manifestEntries> <Class-Path>.</Class-Path> </manifestEntries> </archive> </configuration> </plugin> ....省略一些配置 </plugins> 重點關注標紅色的配置,容器啓動使用的是容器Main方法啓動,故須要配置 配置好之後,咱們就可使用maven的命令打須要的服務jar包。利用java -jar命令去執行你的jar包,就能夠將服務註冊到你的zookeeper註冊中心了。 請各位持續關注《跟我學習dubbo-在Linux操做系統上手工部署Dubbo服務(5)》 1. 項目核心代碼結構截圖 項目模塊依賴 特別提醒:開發人員在開發的時候能夠將本身的業務REST服務化或者Dubbo服務化 2. 項目依賴介紹 2.1 後臺管理系統、Rest服務系統、Scheculer定時調度系統依賴以下圖: 2.2 Dubbo獨立服務項目依賴以下圖: 3. 項目功能部分截圖: zookeeper、dubbo服務啓動 dubbo管控臺 REST服務平臺 |