文章目录
1、功能分析
1.1、后台系统所用的技术
1.2、创建数据库
1.3、Mybatis逆向工程
1.4、系统间通信问题
2、Dubbo
2.1、什么是dubbo
2.2、Dubbo的架构
2.3、Dubbo的使用方法
2.4、注册中心--zookeeper
3、SSM框架整合+Zookeeper
3.1、需求
3.2、配置对dubbo的依赖
3.3、整合思路
3.4、Dao整合
3.5、Service整合
3.6、表现层整合
3.7、dubbo服务调用测试
4、Dubbo的Admin管理平台
4.1、环境准备
4.2、部署监控中心
4.3、测试访问
5、后台商品列表查询功能
5.1、整合静态页面
5.2、展示后台首页+展示菜单页面
5.3、后台商品列表查询功能分析
5.4、Mybatis的分页插件PageHelper
5.5、Service层
5.6、表现层
5.7、测试
5.8、解决错误+原因
5.9、安装maven工程时跳过测试
课程计划
第二天:商品列表功能实现
1、功能分析
2、服务中间件Dubbo
3、SSM框架整合+Zookeeper
4、Dubbo的Admin管理平台
5、后台商品列表查询功能实现
回到顶部
1、功能分析
1.1、后台系统所用的技术
框架:Spring + SpringMVC + Mybatis + Dubbo
前端:EasyUI
数据库:MySQL
1.2、创建数据库
1、安装mysql数据库,要求5.5以上版本。
2、在mysql中创建一个taotao数据库。
3、将创建数据库的脚本taotao.sql导入到taotao中。
1.3、Mybatis逆向工程
使用mybatis官方提供的mybatis-generator生成pojo、mapper接口及映射文件。
并且将pojo放到toatao-manager-pojo工程中。
将mapper接口及映射文件放到taotao-manager-dao工程中。
注意1:因为涉及到各个工程(系统)之间来回传递对象,所以使用时需要对涉及到的POJO实现序列化接口。
我们发现mybatis的插件,有一个可以自动给所有pojo实现序列化接口(example除外)
注意2:如果生成的pojo能够有toString()的重写会给开发、调试带来很大的方便,所以我们也将生成的pojo重写toString()方法。
同样使用mybatis的插件。
即我们在使用Mybatis逆向工程的时候,在其配置文件generatorConfig.xml中配置下:
1.4、系统间通信问题
1.4.1、分析
由于淘淘商城是基于soa的架构,表现层和服务层是不同的工程。所以要实现商品列表查询需要两个系统之间进行通信。
如何实现远程通信?
1、使用Webservice:效率不高,它是基于soap协议(html+xml)。项目中不推荐使用。优点是:跨语言、跨平台。适用于两个公司之间。
2、使用Restful形式的服务:http+json。很多项目中应用。如果服务越来越多,服务与服务之间的调用关系复杂,调用服务的URL管理复杂,什么时候添加机器难以确定。 需要治疗服务。适用于中小型企业。
3、使用Dubbo:使用RPC协议进行远程调用,直接使用socket通信。传输效率高,并且可以统计出系统之间的调用关系、调用次数,管理服务。适用于大型企业。缺点:不能跨语言。只能java语言。
回到顶部
2、Dubbo
2.1、什么是dubbo
最新中文网址:https://dubbo.incubator.apache.org/zh-cn/index.html
DUBBO是一个分布式服务框架,致力于提供高性能和透明化的RPC远程服务调用方案,是阿里巴巴SOA服务化治理方案的核心框架,每天为2,000+个服务提供3,000,000,000+次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进。
单一应用架构
当网站流量很小时,只需一个应用,将所有功能都部署在一起,以减少部署节点和成本。
此时,用于简化增删改查工作量的数据访问框架(ORM)是关键。
垂直应用架构
当访问量逐渐增大,单一应用增加机器带来的加速度越来越小,将应用拆成互不相干的几个应用,以提升效率。
此时,用于加速前端页面开发的Web框架(MVC)是关键。
分布式服务架构
当垂直应用越来越多,应用之间交互不可避免,将核心业务抽取出来,作为独立的服务,逐渐形成稳定的服务中心,使前端应用能更快速的响应多变的市场需求。
此时,用于提高业务复用及整合的分布式服务框架(RPC)是关键。
流动计算架构
当服务越来越多,容量的评估,小服务资源的浪费等问题逐渐显现,此时需增加一个调度中心基于访问压力实时管理集群容量,提高集群利用率。
此时,用于提高机器利用率的资源调度和治理中心(SOA)是关键。
Dubbo就是资源调度和治理中心的管理工具。
Dubbo 就是类似于webservice的关于系统之间通信的框架,并可以统计和管理服务直接的调用情况(包括服务被谁调用了,调用的次数是如何,以及服务的使用状况)。
2.2、Dubbo的架构
Apache Dubbo (incubating) |ˈdʌbəʊ| 是一款高性能、轻量级的开源Java RPC框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。
节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
0、服务容器负责启动,加载,运行服务提供者。
1、服务提供者在启动时,向注册中心注册自己提供的服务。
2、服务消费者在启动时,向注册中心订阅自己所需的服务。
3、注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于`长连接`推送变更数据给消费者。
4、服务消费者,从提供者地址列表中,基于`软负载均衡算法`,选一台提供者进行调用,如果调用失败,再选另一台调用。
5、服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次`统计`数据到监控中心。
2.3、Dubbo的使用方法
spring配置
Dubbo采用全Spring配置方式,透明化接入应用,对应用没有任何API侵入,只需用Spring加载Dubbo的配置即可,Dubbo基于Spring的Schema扩展进行加载。
单一工程中spring的配置local.xml(没有使用dubbo时):
远程服务(使用dubbo时):
在本地服务的基础上,只需做简单配置,即可完成远程化:
将上面的local.xml配置拆分成两份,将服务定义部分放在服务提供方remote-provider.xml,将服务引用部分放在服务消费方remote-consumer.xml。
并在服务提供方增加暴露服务配置,在服务消费方增加引用服务配置。
服务层发布服务:
表现层调用服务:
2.4、注册中心--zookeeper
2.4.1、zookeeper的介绍
Zookeeper(集群管理工具:动物管理员)适用于大数据里面的生态系统。比如:大数据中的hadoop(大象)、Hive(蜂巢)等等动物需要动物管理员来管理哈!
Dubbo中使用Zookeeper是作为注册中心使用的,注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。使用dubbo-2.3.3以上版本,建议使用Zookeeper注册中心。
Zookeeper是Apacahe Hadoop的子项目,是一个树型的目录服务,支持变更推送,适合作为Dubbo服务的注册中心,工业强度较高(稳定性好),可用于生产环境,并推荐使用。
2.4.2、环境准备
虚拟机软件环境:VMware 14 PRO
linux环境:CentOS 7.5
环境我已经装备好了,我们使用VMWare打开虚拟机。
2.4.3、使用SecureCRT连接Linux系统
清除所有文件,我们先要有一个干干净净的Linux系统。如下图:
2.4.4、zookeeper的安装
第一步:linux上安装jdk,参考链接:https://www.cnblogs.com/chenmingjun/p/9931593.html
第二步:上传linux版本的zookeeper压缩包至linux系统下的/user/local/zookeeper目录下,解压缩zookeeper压缩包
第三步:进入zookeeper解压目录,将conf文件夹下zoo_sample.cfg改名为zoo.cfg,命令:mv zoo_sample.cfg zoo.cfg
第四步:编辑zoo.cfg文件,修改配置dataDir属性,指定一个真实目录(进入zookeeper解压目录,创建data目录:mkdir data)
第五步:
启动zookeeper:bin/zkServer.sh start
关闭zookeeper:bin/zkServer.sh stop
查看zookeeper状态:bin/zkServer.sh status
注意:如果出现问题,需要关闭linux的防火墙。否则不建议关闭防火墙,而是配置防火墙。
回到顶部
3、SSM框架整合+Zookeeper
3.1、需求
根据商品id查询商品信息,并将商品信息使用json数据返回。
分析:
请求的url:`/item/{itemId}` 注意:(把参数放在了请求的里面,使用Restfull软件架构设计模式)
参数:商品id,从请求的url中获得
返回值:TbItem对象,逆向工程生成的pojo(响应json数据)
3.2、配置对dubbo的依赖
加入dubbo相关的jar包。服务层、表现层都要配置。在服务层、表现层的pom.xml文件中添加依赖。
服务层:taotao-manager-service/pom.xml
com.alibaba
dubbo
${dubbo.version}
org.apache.zookeeper
zookeeper
${zookeeper.version}
com.github.sgroschupf
zkclient
${zkclient.version}
注意:当我们配置对dubbo的依赖后,要查看dubbo的依赖关系,排除掉dubbo依赖的低版本的jar,比如:spring-2.5.6.SEC03.jar和netty-3.2.5.Final.jar(这同样也是编程的好习惯)!
排除方法:
方法一:在taotao-manager-service/pom.xml中手动编写代码,所以最终pom.xml中要添加的内容如下:
com.alibaba
dubbo
spring
org.springframework
netty
org.jboss.netty
org.apache.zookeeper
zookeeper
com.github.sgroschupf
zkclient
方法二:使用图形化界面,如下图所示:
二种方式本质是一样的!
表现层:taotao-manager-web/pom.xml
com.alibaba
dubbo
spring
org.springframework
netty
org.jboss.netty
org.apache.zookeeper
zookeeper
com.github.sgroschupf
zkclient
3.3、整合思路
1、Dao层:
mybatis整合spring,通过spring管理SqlSessionFactory、Mapper代理对象。需要mybatis和spring的整合包。由spring创建数据库连接池。
下图所示为文件所对应的工程:
2、Service层:
所有的service实现类都放到spring容器中管理,并由spring管理事务。发布dubbo服务。
下图所示为文件所对应的工程:
web.xml中:配置加载spring容器
3、表现层:
springmvc框架,由springmvc管理Controller。引用dubbo服务。
下图所示为文件所对应的工程:
web.xml中:配置前端控制器,配置URL拦截形式。
3.4、Dao整合
整合后的目录结构如下:后面的配置文件可以参考此图片创建目录(这样的目录结构赏心悦目啊!)
3.4.1、创建SqlMapConfig.xml配置文件
SqlMapConfig.xml(由于和spring进行整合了,里面空空如也,但是该文件必须要有!)
3.4.2、spring整合mybatis
创建applicationContext-dao.xml
db.properties
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/taotao?characterEncoding=utf-8
jdbc.username=root
jdbc.password=root
备注:
Druid(德鲁伊)是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。
Druid已经在阿里巴巴部署了超过600个应用,经过多年多生产环境大规模部署的严苛考验。
3.5、Service整合
3.5.1、配置管理Service
applicationContext-service.xml
关键字: