架構師之路(十九)DOBBO打成jar包

架構師之路(十九)

作爲一名軟件開發人員,成爲架構師是追求之一。系統架構師的能力不僅僅體現在書寫業務代碼上,更重要的是系統的結構和性能,是否具有可拓展性、高併發性和穩定性。


在研究Dubbo的架構的時候,網上的例子是在開發當中,構建一個server的java項目,customer的消費者,customer項目進行dependcy依賴就可以調用服務了,但是這樣耦合性太多,經過下午的研究,發現了DUBBO的重點方法,就是把DUBBO打成jar包,採用命令執行jar包,把服務註冊到Zookeper,消費者通過Zookeper進行調用,就可以了。


轉載請註明出處:http://blog.csdn.net/l1028386804/article/details/70500018

服務器: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)
注意點

[html] view plain copy
  1. spring-context.xml  
  2. <import resource="classpath:spring/xxx.xml" />  
官方:服務容器的加載內容可以擴展,內置了spring, jetty, log4j等加載,可通過Container擴展點進行擴展
Dubbo是通過JDK的ShutdownHook來完成優雅停機的,所以如果用戶使用"kill -9 PID"等強制關閉指令,是不會執行優雅停機的,只有通過"kill PID"時,纔會執行。
原理:
服務提供方停止時,先標記爲不接收新請求,新請求過來時直接報錯,讓客戶端重試其它機器。 然後,檢測線程池中的線程是否正在運行,如果有,等待所有線程執行完成,除非超時,則強制關閉。
服務消費方停止時,不再發起新的調用請求,所有新的調用在客戶端即報錯。然後,檢測有沒有請求的響應還沒有返回,等待響應返回,除非超時,則強制關閉。

二、Maven構建Dubbo服務可執行Jar包的配置

[html] view plain copy
  1. <!--MAVEN打包duboo可執行jar begin -->  
  2. <build>  
  3.     <finalName>mydubbo-server</finalName>  
  4.   
  5.     <resources>  
  6.         <resource>  
  7.             <targetPath>${project.build.directory}/classes</targetPath>  
  8.             <directory>src/main/resources</directory>  
  9.             <filtering>true</filtering>  
  10.             <includes>  
  11.                 <include>**/*.xml</include>  
  12.                 <include>**/*.properties</include>  
  13.             </includes>  
  14.         </resource>  
  15.         <!-- 結合com.alibaba.dubbo.container.Main -->  
  16.         <resource>  
  17.             <targetPath>${project.build.directory}/classes/META-INF/spring</targetPath>  
  18.             <directory>src/main/resources/spring</directory>  
  19.             <filtering>true</filtering>  
  20.             <includes>  
  21.                 <include>spring-context.xml</include>  
  22.             </includes>  
  23.         </resource>  
  24.     </resources>  
  25.       
  26.     <pluginManagement>  
  27.         <plugins>  
  28.             <!-- 解決Maven插件在Eclipse內執行了一系列的生命週期引起衝突 -->  
  29.             <plugin>  
  30.                 <groupId>org.eclipse.m2e</groupId>  
  31.                 <artifactId>lifecycle-mapping</artifactId>  
  32.                 <version>1.0.0</version>  
  33.                 <configuration>  
  34.                     <lifecycleMappingMetadata>  
  35.                         <pluginExecutions>  
  36.                             <pluginExecution>  
  37.                                 <pluginExecutionFilter>  
  38.                                     <groupId>org.apache.maven.plugins</groupId>  
  39.                                     <artifactId>maven-dependency-plugin</artifactId>  
  40.                                     <versionRange>[2.0,)</versionRange>   
  41.                                     <goals>  
  42.                                         <goal>copy-dependencies</goal>  
  43.                                     </goals>  
  44.                                 </pluginExecutionFilter>  
  45.                                 <action>  
  46.                                     <ignore />  
  47.                                 </action>  
  48.                             </pluginExecution>  
  49.                         </pluginExecutions>  
  50.                     </lifecycleMappingMetadata>  
  51.                 </configuration>  
  52.             </plugin>  
  53.         </plugins>  
  54.     </pluginManagement>  
  55.     <plugins>  
  56.         <!-- 打包jar文件時,配置manifest文件,加入lib包的jar依賴 -->  
  57.         <plugin>  
  58.             <groupId>org.apache.maven.plugins</groupId>  
  59.             <artifactId>maven-jar-plugin</artifactId>  
  60.             <configuration>  
  61.                 <classesDirectory>target/classes/</classesDirectory>  
  62.                 <archive>  
  63.                     <manifest>  
  64.                         <mainClass>com.alibaba.dubbo.container.Main</mainClass>  
  65.                         <!-- 打包時 MANIFEST.MF文件不記錄的時間戳版本 -->  
  66.                         <useUniqueVersions>false</useUniqueVersions>  
  67.                         <addClasspath>true</addClasspath>  
  68.                         <classpathPrefix>lib/</classpathPrefix>  
  69.                     </manifest>  
  70.                     <manifestEntries>  
  71.                         <Class-Path>.</Class-Path>  
  72.                     </manifestEntries>  
  73.                 </archive>  
  74.             </configuration>  
  75.         </plugin>  
  76.         <plugin>  
  77.             <groupId>org.apache.maven.plugins</groupId>  
  78.             <artifactId>maven-dependency-plugin</artifactId>  
  79.             <executions>  
  80.                 <execution>  
  81.                     <id>copy-dependencies</id>  
  82.                     <phase>package</phase>  
  83.                     <goals>  
  84.                         <goal>copy-dependencies</goal>  
  85.                     </goals>  
  86.                     <configuration>  
  87.                         <type>jar</type>  
  88.                         <includeTypes>jar</includeTypes>  
  89.                         <useUniqueVersions>false</useUniqueVersions>  
  90.                         <outputDirectory>  
  91.                             ${project.build.directory}/lib  
  92.                         </outputDirectory>  
  93.                     </configuration>  
  94.                 </execution>  
  95.             </executions>  
  96.         </plugin>  
  97.     </plugins>  
  98. </build>  
  99. <!--MAVEN打包duboo可執行jar end -->  
用Maven將工程打成jar包後,進入工程的target目錄後,將mydubbo-server.jar和lib目錄拷貝到指定的目錄下,命令行運行java -jar mydubbo-server.jar就可以運行dubbo服務了。(注:lib目錄下的所有jar包是mydubbo-server.jar的依賴jar)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章