该部分引入dubbo框架,对项目进行重构
九、项目拆分
十、面向服务的分布式框架dubbo
1.pom中引入dubbo-2.8.4的jar包
2.linux服务器中安装zookeeper-3.1.6,并进行配置:
- zookeeper存放的位置为 /usr/local/zk,进入bin文件夹
- 启动zookeeper:
#zkServer.sh start //启动
#zkServer.sh status //查看状态
#zkServer.sh stop //停止/关闭
- 查看客户端提供的dubbo
zkCli.sh //查看dubbo
rmr /dubbo //删除dubbo节点
通过引入dubbo使service层成为服务的提供者,web层成为服务的消费者。
- 注意在项目拆分的过程中,我遇到了一个问题,tomocat一直启动不成功,报出缺少spring包的错误。
解决办法:发现service层和web层的spring-core,spring-bean,spring-aop的版本为3.2.9和spring-mvc的版本4.2.0不一致,找了很久才发现问题。
原来引入dubbo的时候会自动引入spring,并且其版本为3.2.9,而我们子集引入的spring版本为4.2.0,导致spring的版本冲突,解决办法:
方法一:
查询了网上的一些资料发现别人都是采用删除dubbo的spring依赖:不知道为什么采用该方法,一直无法去除dubbo中的spring,所以我才用方法二解决了
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dubbo</artifactId>
<version>2.5.3</version>
<!-- 排除spring-->
<exclusions>
<exclusion>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
</exclusion>
</exclusions>
</dependency>
方法二:spring冲突是因为先引入了dubbo包再引入spring包,spring的版本还是不会改变的,所以我们将Service层和Web层的dubbo包放在最后引入。
10.2 Dubbo在项目中的使用方法
通过dubbo在表示层中访问业务逻辑层中的组件
- Provider
暴露服务方称之为“服务提供者”。 - Consumer
调用远程服务方称之为“服务消费者”。 - Registry
服务注册与发现的中心目录服务称之为“服务注册中心”。我们使用zookeeper - Monitor
统计服务的调用次数和调用时间的日志服务称之为“服务监控中心”。
1.在表示层(web)和业务逻辑层(service)添加dubbo和zookeeper包
2.在linux中安装zookeeper
3.通过dubbo在表示层中访问业务逻辑层中的组件,此步骤需要配置消费者和提供者
服务提供者配置:service层配置:
- 提供暴露的端口20880
- zookeeper地址及端口
- 声明需要暴露的接口,也就是我们的service接口和接口的实现类
<!-- 使用dubbo发布服务 -->
<dubbo:application name="YF_MS_SERVICE"/>
<!-- 用dubbo协议在20880端口暴露服务 -->
<dubbo:protocol name="dubbo" port="20880" />
<!-- address为虚拟机zookeeper地址及端口号,集群时候可以配置多个地址 -->
<dubbo:registry protocol="zookeeper" address="192.168.220.129:2181"></dubbo:registry>
<!--interface 表示服务者暴漏的接口, ref表示指向这个接口的具体实现类-->
<dubbo:service interface="modules.cart.service.AddToCart" ref="addToCartIMpl"/>
<!--接口的具体实现类-->
<bean id="addToCartIMpl" class="modules.cart.service.impl.AddToCartIMpl"/>
服务消费者配置:web层配置
- 配置zookeeper地址和端口
- 配置消费者需要的服务,也就是该web层需要使用的service接口
<!--这个也很简单。配置了项目名称和dubbo的相关信息 -->
<dubbo:application name="crudCustomer"/>
<dubbo:registry address="zookeeper://127.0.0.1:2181"/>
<!--这个是配置消费者需要的服务-->
<dubbo:reference interface="modules.cart.service.AddToCart" id="addtoCart"/>
10.3 项目启动问题
由于使用了dubbo框架,所以我们通常会将表示层和业务逻辑层分别放在不同的服务器上,因为我们必须要先保证业务逻辑层先启动起来,再将表示层项目启动起来,这样表示层才能调用业务逻辑层的方法。
如何实现:
再eclipse中,我们可以配置多个tomcat,将web项目部署到tomcat1,将service项目部署到tomcat2就行了