前面写过 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);
}
}
}
}
}
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