dubbo(二)普通项目dubbo服务化改造+provider构建为jar包运行

前面写过 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.改造前后目录结构对比

改造前如下图


改造后如下图



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方法来运行这个提供者.

public class DubboProvider {

	private static final Log log = LogFactory.getLog(DubboProvider.class);

	public static void main(String[] args) {
		try {
			ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring/application-context.xml");
			context.start();
		} catch (Exception e) {
			log.error("== DubboProvider context start error:", e);
		}
		synchronized (DubboProvider.class) {
			while (true) {
				try {
					DubboProvider.class.wait();
				} catch (InterruptedException e) {
					log.error("== synchronized error:", e);
					log.info(e);
				}
			}
		}
	}
}

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


4.构建可运行jar包

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


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

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

		
			
			
				org.apache.maven.plugins
				maven-jar-plugin
				
					target/classes/
					
						
							com.alibaba.dubbo.container.Main
							
							false
							true
							lib/
						
						
							.
						
					
				
			
			
			
			
				org.apache.maven.plugins
				maven-dependency-plugin
				
					
						copy-dependencies
						package
						
							copy-dependencies
						
						
							jar
							jar
							
								${project.build.directory}/lib
							
						
					
				
						
		

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


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


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



你可能感兴趣的:(dubbo,框架,dubbo)