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 项目打包*(服务者)_第1张图片

改造后如下图

dubbo+maven 项目打包*(服务者)_第2张图片


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 项目打包*(服务者)_第3张图片

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

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

[html]  view plain  copy
  1. <plugins>  
  2.       
  3.     <plugin>  
  4.         <groupId>org.apache.maven.pluginsgroupId>  
  5.         <artifactId>maven-jar-pluginartifactId>  
  6.         <configuration>  
  7.             <classesDirectory>target/classes/classesDirectory>  
  8.             <archive>  
  9.                 <manifest>  
  10.                     <mainClass>com.alibaba.dubbo.container.MainmainClass>  
  11.                       
  12.                     <useUniqueVersions>falseuseUniqueVersions>  
  13.                     <addClasspath>trueaddClasspath>  
  14.                     <classpathPrefix>lib/classpathPrefix>  
  15.                 manifest>  
  16.                 <manifestEntries>  
  17.                     <Class-Path>.Class-Path>  
  18.                 manifestEntries>  
  19.             archive>  
  20.         configuration>  
  21.     plugin>  
  22.       
  23.       
  24.     <plugin>  
  25.         <groupId>org.apache.maven.pluginsgroupId>  
  26.         <artifactId>maven-dependency-pluginartifactId>  
  27.         <executions>  
  28.             <execution>  
  29.                 <id>copy-dependenciesid>  
  30.                 <phase>packagephase>  
  31.                 <goals>  
  32.                     <goal>copy-dependenciesgoal>  
  33.                 goals>  
  34.                 <configuration>  
  35.                     <type>jartype>  
  36.                     <includeTypes>jarincludeTypes>  
  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 项目打包*(服务者)_第4张图片

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


你可能感兴趣的:(dubbo+maven 项目打包*(服务者))