Dubbo之——将Dubbo服务打包成Jar包
服務器:192.168.1.121(mydubbo-server)
一、Dubbo服務的運行方式
1、使用Servlet容器運行(Tomcat、Jetty等)—-不可取 缺點:增加復雜性(端口、管理)
tomcat/jetty等占用端口,dubbo服務也需要端口
浪費資源(內存):單獨啟動tomcat,jetty占用內存大
2、自建Main方法類來運行(spring容器) —-不建議(本地調試可用)
缺點: Dobbo本身提供的高級特性沒用上
自已編寫啟動類可能會有缺陷
3、使用Dubbo框架提供的Main方法類來運行(Spring容器)—-建議使用 優點:框架本身提供(com.alibaba.dubbo.container.Main)
可實現優雅關機(ShutdownHook)
注意點
官方:服務容器的加載內容可以擴展,內置了spring, jetty, log4j等加載,可通過Container擴展點進行擴展
Dubbo是通過JDK的ShutdownHook來完成優雅停機的,所以如果用戶使用”kill -9 PID”等強制關閉指令,是不會執行優雅停機的,只有通過”kill PID”時,才會執行。
原理:
服務提供方停止時,先標記為不接收新請求,新請求過來時直接報錯,讓客戶端重試其它機器。 然后,檢測線程池中的線程是否正在運行,如果有,等待所有線程執行完成,除非超時,則強制關閉。
服務消費方停止時,不再發起新的調用請求,所有新的調用在客戶端即報錯。然后,檢測有沒有請求的響應還沒有返回,等待響應返回,除非超時,則強制關閉。
二、Maven構建Dubbo服務可執行Jar包的配置
<!--MAVEN打包duboo可執行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><!-- 結合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內執行了一系列的生命周期引起沖突 --><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文件時,配置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><!-- 打包時 MANIFEST.MF文件不記錄的時間戳版本 --><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可執行jar end --> 用Maven將工程打成jar包后,進入工程的target目錄后,將mydubbo-server.jar和lib目錄拷貝到指定的目錄下,命令行運行java -jar mydubbo-server.jar就可以運行dubbo服務了。(注:lib目錄下的所有jar包是mydubbo-server.jar的依賴jar)總結
以上是生活随笔為你收集整理的Dubbo之——将Dubbo服务打包成Jar包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开机不启动怎么设置 开机无法启动怎么办
- 下一篇: ELK架构设计介绍(转:https://