dubbo+maven 项目打包*(服务者)


前面写过 dubbo的 hello world 和 一个普通的ssm框架集成 的2个项目. 

今天我们来将 普通的项目 改造成dubbo服务的结构. 并且provider以jar包方式运行.

前面 dubbo的hello world 点这里看 传送门

前面 ssm框架集成的项目 点这里看 传送门


本博客源码地址:https://code.csdn.net/qq315737546/dt2/tree/master


1.改造前后目录结构对比

2.改造思路说明

3.测试改造后项目

4.构建可运行jar包


1.改造前后目录结构对比

改造前如下图

dubbo+maven 项目打包*(服务者)

改造后如下图

dubbo+maven 项目打包*(服务者)


2.改造思路说明

1)增加serviceImpl层.

通过dubbo helloworld的项目, 我们知道 消费者和提供者需要公用接口层. 所以我们改造的时候将原来的service层 分为 service和impl 层.

2)抽取common包.

 dubbo的思想就是服务化,所以会有多个服务(提供者),而这些服务要公用的common包,就单独出来做为一个jar.

3)将model层和service层放入api. 

service层是接口,而model层也需要 消费者和提供者公用, 所以都放入 api中.

4)提供者中删除web配置.

因为提供者中不需要提供web服务,所以就可以删除mvc的配置文件.dao层和serviceImpl则要放在这里, 如果用redis等缓存,也是放在这.

5)消费者中删除数据库配置

消费者负责请求分发,调用对应提供者,所以不再需要数据库配置


3.测试改造后项目

项目按上面目录结构改造后,就可以进行测试了. 

我们在dubbo的helloworld中,测试是把 提供者和消费者都部署在tomcat进行的. 现在我们的提供者因为删掉了web配置,不能再放到tomcat这种容器中运行.这时候可以自己写个main方法来运行这个提供者.

[java] view plain copy
  1. public class DubboProvider {  
  2.   
  3.     private static final Log log = LogFactory.getLog(DubboProvider.class);  
  4.   
  5.     public static void main(String[] args) {  
  6.         try {  
  7.             ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/application-context.xml");  
  8.             context.start();  
  9.         } catch (Exception e) {  
  10.             log.error("== DubboProvider context start error:", e);  
  11.         }  
  12.         synchronized (DubboProvider.class) {  
  13.             while (true) {  
  14.                 try {  
  15.                     DubboProvider.class.wait();  
  16.                 } catch (InterruptedException e) {  
  17.                     log.error("== synchronized error:", e);  
  18.                     log.info(e);  
  19.                 }  
  20.             }  
  21.         }  
  22.     }  
  23. }  

运行这个类,然后把 消费者部署到 tomcat中运行. 就可以进行测试了.


4.构建可运行jar包

提供者以jar包运行是dubbo官方推荐的,如下图 传送门

dubbo+maven 项目打包*(服务者)

提供者以jar包方式运行,在本地调试可以用main方法运行,部署的时候就只能是打成jar包了.

我们这里使用maven来配置,使用默认的Spring Container (自动加载META-INF/spring目录下的所有Spring配置。)

[html] view plain copy
  1. <plugins>  
  2.     <!-- 打包jar文件时,配置manifest文件,加入lib包的jar依赖 -->  
  3.     <plugin>  
  4.         <groupId>org.apache.maven.plugins</groupId>  
  5.         <artifactId>maven-jar-plugin</artifactId>  
  6.         <configuration>  
  7.             <classesDirectory>target/classes/</classesDirectory>  
  8.             <archive>  
  9.                 <manifest>  
  10.                     <mainClass>com.alibaba.dubbo.container.Main</mainClass>  
  11.                     <!-- 打包时 MANIFEST.MF文件不记录的时间戳版本 -->  
  12.                     <useUniqueVersions>false</useUniqueVersions>  
  13.                     <addClasspath>true</addClasspath>  
  14.                     <classpathPrefix>lib/</classpathPrefix>  
  15.                 </manifest>  
  16.                 <manifestEntries>  
  17.                     <Class-Path>.</Class-Path>  
  18.                 </manifestEntries>  
  19.             </archive>  
  20.         </configuration>  
  21.     </plugin>  
  22.       
  23.     <!-- 把依赖的jar包,打成一个lib文件夹 -->  
  24.     <plugin>  
  25.         <groupId>org.apache.maven.plugins</groupId>  
  26.         <artifactId>maven-dependency-plugin</artifactId>  
  27.         <executions>  
  28.             <execution>  
  29.                 <id>copy-dependencies</id>  
  30.                 <phase>package</phase>  
  31.                 <goals>  
  32.                     <goal>copy-dependencies</goal>  
  33.                 </goals>  
  34.                 <configuration>  
  35.                     <type>jar</type>  
  36.                     <includeTypes>jar</includeTypes>  
  37.                     <outputDirectory>  
  38.                         ${project.build.directory}/lib  
  39.                     </outputDirectory>  
  40.                 </configuration>  
  41.             </execution>  
  42.         </executions>  
  43.     </plugin>           
  44. </plugins>  

eclipse里面, run as  maven install, 就可以在target目录下得到 jar包和lib文件夹

dubbo+maven 项目打包*(服务者)

这时候用命令行 运行 java -jar dt2-service-user.jar  就可以启动提供者的服务了. (如果copy到别的目录,需要把lib文件夹一起copy过去).