Dubbo+Zookeeper+Spring+Struts+Hibernate(ssh)整合应用实现分布式
一、 项目搭建
把原来以ssh为框架的系统拆分为三个项目,分别为dubbo-client、dubbo-service、dubbo-web。
1. dubbo-client:消费者,主要实现controller层控制跳转等。
2. dubbo-service:主要是接口定义,供dubbo-client调用,以及dubbo-web的service层去实现该接口,分离这一层的好处就是前端项目调用接口时候,直接调用dubbo-service的接口即可,不需要关注后端如何实现;而service层来具体实现该接口,进行业务逻辑处理,不需要关注dubbo-client的controller层如何调用。
3. dubbo-web:提供者,主要是service、dao实现,结合数据层实现后端业务逻辑处理。
项目搭建完后的结构图如下:
二、项目配置
1. 将dubbo-service打包成jar加入到dubbo-client和dubbo-web中。
<groupId>com.lwl.dubbo</groupId>
<artifactId>dubbo-client</artifactId>
<packaging>war</packaging>
<version>${internal.version}</version>
<name>dubbo-client</name>
<dependencies>
<dependency>
<groupId>com.lwl.dubbo</groupId>
<artifactId>dubbo-service</artifactId>
<version>1.0.0</version>
</dependency>
<groupId>com.lwl.dubbo</groupId>
<artifactId>dubbo-web</artifactId>
<packaging>war</packaging>
<version>${internal.version}</version>
<name>dubbo-web</name>
<dependencies>
<dependency>
<groupId>com.lwl.dubbo</groupId>
<artifactId>dubbo-service</artifactId>
<version>1.0.0</version>
</dependency>
2.在pom.xml中加入以下配置:
<!-- dubbo strat -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<exclusions>
<exclusion>
<artifactId>spring</artifactId>
<groupId>org.springframework</groupId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.zookeeper</groupId>
<artifactId>zookeeper</artifactId>
<version>3.3.6</version>
<exclusions>
<exclusion>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
</dependency>
<dependency>
<groupId>com.github.sgroschupf</groupId>
<artifactId>zkclient</artifactId>
<version>0.1</version>
</dependency>
3.消费者的dubbo-config.xml:
<!-- 提供方应用信息,用于计算依赖关系 -->
<dubbo:application name="dobbu-client" />
<!-- 注册仓库地址:zookeeper组件,192.168.61.128:2181 -->
<dubbo:registry address="zookeeper://127.0.0.1:2181"
check="false" />
<!-- 等待时间,重试0次 -->
<dubbo:consumer timeout="10000" retries="0" check="false"
lazy="true" />
<!-- 基础信息 -->
<dubbo:reference id="userService"
interface="com.lwl.dubbo.service.IUserService" />
4 . 提供者的dubbo-config.xml:
<dubbo:application name="dubbo-web" owner="programmer"
organization="lwl-dubbox" />
<!--使用 zookeeper 注册中心暴露服务,注意要先开启 zookeeper -->
<dubbo:registry address="zookeeper://localhost:2181" />
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" serialization="java" />
<!--使用 dubbo 协议实现定义好的 api.PermissionService 接口 -->
<dubbo:service interface="com.lwl.dubbo.service.IUserService"
ref="userService" protocol="dubbo" />
<!--具体实现该接口的 bean -->
<bean id="userService" class="com.lwl.dubbo.service.impl.UserServiceImpl" />
5 . 配置applicationContext-spring.xml:
<import resource="classpath:dubbo_config.xml"/>
二、 项目编写
1. 消费者服务:
public class ConsumerApp {
public static void main(String[] args) throws Exception {
//读取配置文件
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"dubbo_config.xml"});
//获取在zookeeper注册的服务接口
context.start();
IUserService userService = (IUserService) context.getBean("userService");
//不让控制台消失,按任意键结束
System.in.read();
}
}
2 . 提供者服务:
public class ProviderApp {
public static void main(String[] args) throws Exception {
// 读取配置文件
new ClassPathXmlApplicationContext(new String[] { "dubbo_config.xml" });
System.out.println("provider服务已注册");
// 使线程阻塞
System.in.read();
}
}
三、 项目结果
3.1启动zookeeper
3.2将项目部署到Tomact
3.3主要功能界面
四、总结
一开始看到文档很不解,完全没有头绪不知道该如何下手。于是就瞎琢磨的浪费了一个8天时间也没用弄好。想一口吃成一个胖子,单纯的以为把自己项目搬到实验四就可以了。由于不理解dubbo的内容,遇到了很多错误。找了很多办法都无法解决。于是就白白浪费了8天时间。
临近期末了,不得不静下心来,自己重新搭框架慢慢做,我不相信做不出来。这一次我不再整个项目照搬。而且从基础的登录开始,做了一会,我发现能实现登录了,那就说明之前是因为自己的不细心,很多需要改,需要配置的地方没有弄好而出现的项目无法运行。所以不管做什么一定不能急,要理解内容,慢慢开始下手。
em…然后就是加油ヾ(◍°∇°◍)ノ゙,还有一个课程设计和一片文档的我…..别看剧了!!