1.项目架构
传统项目架构:
优点:层级分离,耦合性降低,便于维护
缺点:代码冗余过大,service,dao
新技术架构:
使用技术:dubbo,maven,zookper
项目脉络:
项目架构: |——baba-parent(父工程 pom) |——babas-common(子工程 jar) | +-------——babas-pojo(子工程 jar)(需要引入common)-----------------+ | | |——babas-dao(子工程 jar)(需要引入pojo) |——babas-interface(子工程 jar)(需要引入pojo) | | | | |——babas-service-cob(子工程 购物车,用户 war)-----------------------+ |——babas-service-cms(子工程 内容管理 war)--------------------------+ |——babas-service-solr(子工程 检索 war) ----------------------------+ |——babas-service-product(子工程 商品 war)--------------------------+ + |——babas-portal(子工程 前台项目 war)---------------------------------+ |——babas-console(子工程 后台项目 war)--------------------------------+ |——babas-login(子工程 单点登录 war)----------------------------------+ 语言描述: pojo依赖common dao和interface依赖pojo 四个service依赖dao,interface 三个war依赖interface配置SpringContext.xml
史上最全的头文件
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:task="http://www.springframework.org/schema/task" xmlns:dubbo="http://code.alibabatech.com/schema/dubbo" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-4.0.xsd http://code.alibabatech.com/schema/dubbo http://code.alibabatech.com/schema/dubbo/dubbo.xsd"> </beans>
在service层加入事务
@Transactional测试:throw new RunTimeException("异常");
结果:如果数据库插入的序号跳过一个,说明保存完回滚了
service层需要spring配置,即applicationContext.xml
service的项目的web.xml中只需要配置读取配置 即可
controller层需要spring-mvc配置,即spring-mvc.xml
controller的项目的web.xm中需要配置读取配置文件以及前端控制器despatcher
Dubbo原理图:
注意:Dubbo传递的参数必须实现序列化。不然会报错
消费者找不到服务端可能是没有配置文件引入
DEMO
服务提供者:
<!--1.名称:计算机区分,唯一--> <dubbo:application name="babas-service-product"/> <!--2.设置注册中心地址,协议:zookeeper--> <!--单机版--> <dubbo:registry address="47.93.12.239:2181" protocol="zookeeper"/> <!--集群版--> <!--<dubbo:registry address="47.93.12.237:2181,47.93.12.238:2181,47.93.12.239:2181" protocol="zookeeper"/>--> <!--3.提供服务方的ip、端口 192.168.12.58:20880,协议:http,dubbo,tcp,udp,--> <dubbo:protocol port="20880" name="dubbo"/> <!--4.暴露实现类,demoService为实现类的别名--> <dubbo:service interface="com.flx.core.service.DemoService" ref="demoService"/> 服务消费者:
<!--1.名称:计算机区分,唯一--> <dubbo:application name="babas-console"/> <!--2.设置注册中心地址,协议:zookeeper--> <!--单机版--> <dubbo:registry address="47.93.12.239:2181" protocol="zookeeper"/> <!--集群版--> <!--<dubbo:registry address="47.93.12.237:2181,47.93.12.238:2181,47.93.12.239:2181" protocol="zookeeper"/>--> <!--3.调用此接口对应的实现类,id对应要注入的名字--> <dubbo:reference interface="com.flx.core.service.DemoService" id="demoService"/>
Dubbo的优化
1.设置链接超时时间(全局)
<dubbo:consumer timeout = 600000/>
2.直接链接
服务提供方:
<!--1.名称:计算机区分,唯一--> <dubbo:application name="babas-service-product"/> <!--2.设置注册中心地址,协议:zookeeper--> <!--单机版--> <!--<dubbo:registry address="47.93.12.239:2181" protocol="zookeeper"/>--> <!--表示只提供服务不注册,目前开发阶段直连--> <dubbo:registry address="N/A"/> <!--集群版--> <!--<dubbo:registry address="47.93.12.237:2181,47.93.12.238:2181,47.93.12.239:2181" protocol="zookeeper"/>--> <!--3.提供服务方的ip、端口 192.168.12.58:20880,协议:http,dubbo,tcp,udp,--> <dubbo:protocol port="20880" name="dubbo"/> <!--4.暴露实现类,demoService为实现类的别名--> <dubbo:service interface="com.flx.core.service.DemoService" ref="demoService"/>
服务消费方:
<!--1.名称:计算机区分,唯一--> <dubbo:application name="babas-console"/> <!--2.设置注册中心地址,协议:zookeeper--> <!--单机版--> <!--<dubbo:registry address="47.93.12.239:2181" protocol="zookeeper"/>--> <!--表示直连服务不注册,目前开发阶段直连--> <dubbo:registry address="N/A"/> <!--集群版--> <!--<dubbo:registry address="47.93.12.237:2181,47.93.12.238:2181,47.93.12.239:2181" protocol="zookeeper"/>--> <!--3.调用此接口对应的实现类,id对应要注入的名字--> <dubbo:reference interface="com.flx.core.service.DemoService" id="demoService" url="dubbo://127.0.0.1:20880"/> <!--全局设置超时时间,超时时间单位毫秒,10分钟--> <dubbo:consumer timeout="600000"/>
3.设置不检查
由于dubbo在启动的时候必须检查注册中心以及服务提供方是否存在,不存在则抛出异常 不检查的对象:服务消费方,因为只有服务消费启动的时候才会去检查注册中心以及服务提供方是否存在
<!--1.名称:计算机区分,唯一--> <dubbo:application name="babas-console"/> <!--2.设置注册中心地址,协议:zookeeper--> <!--单机版--> <!--<dubbo:registry address="47.93.12.239:2181" protocol="zookeeper"/>--> <!--表示直连服务不注册,目前开发阶段直连--> <dubbo:registry address="N/A" check="false"/> <!--集群版--> <!--<dubbo:registry address="47.93.12.237:2181,47.93.12.238:2181,47.93.12.239:2181" protocol="zookeeper"/>--> <!--3.调用此接口对应的实现类,id对应要注入的名字--> <dubbo:reference interface="com.flx.core.service.DemoService" id="demoService" url="dubbo://127.0.0.1:20880"/> <!--全局设置超时时间,超时时间单位毫秒,10分钟--> <dubbo:consumer timeout="600000" check="false"/>