Dubbo之——将Dubbo服务打包成Jar包
服務(wù)器:192.168.1.121(mydubbo-server)
一、Dubbo服務(wù)的運(yùn)行方式
1、使用Servlet容器運(yùn)行(Tomcat、Jetty等)—-不可取 缺點(diǎn):增加復(fù)雜性(端口、管理)
tomcat/jetty等占用端口,dubbo服務(wù)也需要端口
浪費(fèi)資源(內(nèi)存):單獨(dú)啟動(dòng)tomcat,jetty占用內(nèi)存大
2、自建Main方法類(lèi)來(lái)運(yùn)行(spring容器) —-不建議(本地調(diào)試可用)
缺點(diǎn): Dobbo本身提供的高級(jí)特性沒(méi)用上
自已編寫(xiě)啟動(dòng)類(lèi)可能會(huì)有缺陷
3、使用Dubbo框架提供的Main方法類(lèi)來(lái)運(yùn)行(Spring容器)—-建議使用 優(yōu)點(diǎn):框架本身提供(com.alibaba.dubbo.container.Main)
可實(shí)現(xiàn)優(yōu)雅關(guān)機(jī)(ShutdownHook)
注意點(diǎn)
官方:服務(wù)容器的加載內(nèi)容可以擴(kuò)展,內(nèi)置了spring, jetty, log4j等加載,可通過(guò)Container擴(kuò)展點(diǎn)進(jìn)行擴(kuò)展
Dubbo是通過(guò)JDK的ShutdownHook來(lái)完成優(yōu)雅停機(jī)的,所以如果用戶(hù)使用”kill -9 PID”等強(qiáng)制關(guān)閉指令,是不會(huì)執(zhí)行優(yōu)雅停機(jī)的,只有通過(guò)”kill PID”時(shí),才會(huì)執(zhí)行。
原理:
服務(wù)提供方停止時(shí),先標(biāo)記為不接收新請(qǐng)求,新請(qǐng)求過(guò)來(lái)時(shí)直接報(bào)錯(cuò),讓客戶(hù)端重試其它機(jī)器。 然后,檢測(cè)線(xiàn)程池中的線(xiàn)程是否正在運(yùn)行,如果有,等待所有線(xiàn)程執(zhí)行完成,除非超時(shí),則強(qiáng)制關(guān)閉。
服務(wù)消費(fèi)方停止時(shí),不再發(fā)起新的調(diào)用請(qǐng)求,所有新的調(diào)用在客戶(hù)端即報(bào)錯(cuò)。然后,檢測(cè)有沒(méi)有請(qǐng)求的響應(yīng)還沒(méi)有返回,等待響應(yīng)返回,除非超時(shí),則強(qiáng)制關(guān)閉。
二、Maven構(gòu)建Dubbo服務(wù)可執(zhí)行Jar包的配置
<!--MAVEN打包duboo可執(zhí)行jar begin --> <build><finalName>mydubbo-server</finalName><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><!-- 結(jié)合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><pluginManagement><plugins><!-- 解決Maven插件在Eclipse內(nèi)執(zhí)行了一系列的生命周期引起沖突 --><plugin><groupId>org.eclipse.m2e</groupId><artifactId>lifecycle-mapping</artifactId><version>1.0.0</version><configuration><lifecycleMappingMetadata><pluginExecutions><pluginExecution><pluginExecutionFilter><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><versionRange>[2.0,)</versionRange> <goals><goal>copy-dependencies</goal></goals></pluginExecutionFilter><action><ignore /></action></pluginExecution></pluginExecutions></lifecycleMappingMetadata></configuration></plugin></plugins></pluginManagement><plugins><!-- 打包jar文件時(shí),配置manifest文件,加入lib包的jar依賴(lài) --><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><!-- 打包時(shí) MANIFEST.MF文件不記錄的時(shí)間戳版本 --><useUniqueVersions>false</useUniqueVersions><addClasspath>true</addClasspath><classpathPrefix>lib/</classpathPrefix></manifest><manifestEntries><Class-Path>.</Class-Path></manifestEntries></archive></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-dependency-plugin</artifactId><executions><execution><id>copy-dependencies</id><phase>package</phase><goals><goal>copy-dependencies</goal></goals><configuration><type>jar</type><includeTypes>jar</includeTypes><useUniqueVersions>false</useUniqueVersions><outputDirectory>${project.build.directory}/lib</outputDirectory></configuration></execution></executions></plugin></plugins> </build> <!--MAVEN打包duboo可執(zhí)行jar end --> 用Maven將工程打成jar包后,進(jìn)入工程的target目錄后,將mydubbo-server.jar和lib目錄拷貝到指定的目錄下,命令行運(yùn)行java -jar mydubbo-server.jar就可以運(yùn)行dubbo服務(wù)了。(注:lib目錄下的所有jar包是mydubbo-server.jar的依賴(lài)jar)總結(jié)
以上是生活随笔為你收集整理的Dubbo之——将Dubbo服务打包成Jar包的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 开机不启动怎么设置 开机无法启动怎么办
- 下一篇: pe下怎么安装原版系统安装教程 PE系统