今日目标:
(1)了解电商行业特点以及理解电商的模式
(2)了解整体品优购的架构特点
(3)能够运用Dubbox + SSM 搭建分布式应用
(4)搭建工程框架,完成品牌列表的后端代码
目录
1、系统架构
2、Dubbox
3、品优购工程框架搭建
4、品牌列表-后端
1.1 SOA 架构
SOA是Service-Oriented Architecture的首字母简称,它是一种支持面向服务的架构样式。从服务、基于服务开发和服务的结果来看,面向服务是一种思考方式。其实SOA架构更多应用于互联网项目开发。
1.2 品优购架构
1.3 数据表
表名称 |
含义 |
tb_brand |
品牌 |
tb_specification |
规格 |
tb_specification_option |
规格选项 |
tb_type_template |
类型模板:用于关联品牌和规格 |
tb_item_cat |
商品分类 |
tb_seller |
商家 |
tb_goods |
商品 |
tb_goods_desc |
商品详情 |
tb_item |
商品明细 |
tb_content |
内容(广告) |
tb_content_category |
内容(广告)类型 |
tb_user |
用户 |
tb_order |
订单 |
tb_order_item |
订单明细 |
tb_pay_log |
支付日志 |
1.4 框架组合
品优购采用当前流行的前后端编程架构。
后端框架采用Spring+SpringMVC+mybatis +Dubbox 。前端采用angularJS +Bootstrap。
2.1 Dubbox 架构图
节点角色说明:
Provider: 暴露服务的服务提供方。
Consumer: 调用远程服务的服务消费方。
Registry: 服务注册与发现的注册中心。
Monitor: 统计服务的调用次调和调用时间的监控中心。
Container: 服务运行容器。
调用关系说明:
0. 服务容器负责启动,加载,运行服务提供者。
1. 服务提供者在启动时,向注册中心注册自己提供的服务。
2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推
送变更数据给消费者。
4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,
如果调用失败,再选另一台调用。
5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计
数据到监控中心。
2.2 注册中心 Zookeeper 安装
(1)上传zookeeper压缩包到linux服务器,并解压缩。
(2)在zookeeper中创建一个data文件夹。
(3)进入conf文件夹,修改 zoo_simple.cfg 为 zoo.cfg,并编辑dataDir的值为刚新建的data文件夹的路径。
(4)运行zookeeper,查看状态
2.3 Dubbox 管理中心
(1)获取到 Dubbox 的管理中心war包,并上传到linux服务器。还需要上传tomcat压缩包,用于运行war
(2)解压缩 tomcat 的压缩包,并将管理中心的war包,放入webapps目录下,启动tomcat
(3)访问 Dubbox 的管理中心页面,会显示输入登录名和密码,均为:root
(4)登陆后的界面
备注:
(1)Dubbox 没有上传到 maven 仓库中,如果需要使用需要手动安装到本地 maven仓库中。
3.1 创建一个聚合工程,为整个项目的父工程,并配置 pom.xml,主要为相关jar包的版本号锁定
3.2 创建通用实体类模块工程
3.3 创建通用数据访问模块工程
3.4 创建通用组件模块工程
3.5 创建商家商品模块工程(sellergoods-interface、sellergoods-service)
3.6 创建运营商管理后台工程(manager-web)
3.7 创建商家管理后台工程(shop-web)
3.8 使用逆向工程生成pojo和dao代码,其中pojo类需要手动实现 Serializable 接口
3.9 完成各个工程的基本配置
4.1 服务层接口(sellergoods-interface)
package com.pinyougou.sellergoods.service;
import java.util.List;
import com.pinyougou.pojo.TbBrand;
/**
* 品牌相关接口
* @author Administrator
*
*/
public interface BrandService {
/**
* 获取品牌列表
*
* @return java.util.List
*/
List findAll();
}
4.2 服务层实现(sellergoods-service)
package com.pinyougou.sellergoods.service.impl;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import com.alibaba.dubbo.config.annotation.Service;
import com.pinyougou.mapper.TbBrandMapper;
import com.pinyougou.pojo.TbBrand;
import com.pinyougou.sellergoods.service.BrandService;
@Service
public class BrandServiceImpl implements BrandService {
@Autowired
private TbBrandMapper brandMapper;
@Override
public List findAll() {
return brandMapper.selectByExample(null);
}
}
4.3 控制层(manager-web)
package com.pinyougou.manager.controller;
import java.util.List;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.alibaba.dubbo.config.annotation.Reference;
import com.pinyougou.pojo.TbBrand;
import com.pinyougou.sellergoods.service.BrandService;
@RestController
@RequestMapping("/brand")
public class BrandController {
@Reference
private BrandService brandService;
/**
* 获取品牌列表
*
* @return java.util.List
*/
@RequestMapping("/findAll")
public List findAll(){
return brandService.findAll();
}
}
4.4 测试
dubbox监控中心:
备注:
(1)在项目搭建过程中,最后的测试阶段,出现了一次问题,访问 url 报404错误,控制台卡在 Initializing Spring FrameworkServlet 'springmvc',后来发现是因为使用idea创建的maven web骨架没有resources和java的目录,需要手动创建,创建resources时不小心输成了resource,把资源文件的目录名resource改成resources即可。