项目总结

项目最大特点: 商家通过申请平台入驻

分为三大子系统 网站的前台, 运营商后台, 商家管理后台

  1. 网站前台 技术涉及

广告 导航 搜索

商品详情页 设计 freemarker

购物车 涉及

购物车分组

结算 付款方式

提交订单 出现二维码

  1. 运营商后台涉及

商家通过审核

  1. 商家管理后台 涉及

面向服务的架构 SOA

每个方面的业务逻辑功能 独立的应用 分别部署在不同的服务器

页面与逻辑进行分离

实际上是分布式架构

img

每一个橙色小方块 都是一个工程 都是独立部署的应用 橙色部分 只包括 controller 和 页面 没有业务逻辑

dubbox是 SOA架构解决方案的一种

绿色 部分 dubbox 来调用 服务层(service)

这种架构web层不直接依赖于服务层 而是通过网络去调用 dubbox做技术支持

橙色部分和 蓝色部分 的关系是多对多, 一对多 等关系

数据库访问层 数据库分片 数据库集群

消息中间件 ActiveMQ 异步调用 完成验证短信的 邮件 静态页面生成

搜索模块 solr集群

规格和表结构

商品明细 sku 和 spu 的关系

iphoneX 是一个 商品 sku

它有很多颜色 规格 spu

前后端编程架构

通过AJAX 和后端交互

SSM+dubbox

Dubbox框架 分布式框架 SOA架构的 一个解决方案

HSF 与 dubbox 冲突. 阿里不在维护dubbo, 当前当当 维护dubbo 并在此基础上, 出现了 dubbox

dubbox工作流程

注册中心 服务提供方(service层) 服务消费方 (web层)

  1. 服务提供方 将地址 告诉注册中心
  2. 注册中心存在着 地址 对应着 服务
  3. 消费方连接注册中心 调用订阅服务
  4. dubbo monitor 监控 服务方, 调用方

服务消费方 (租客) 注册中心(中介) 服务提供方(房东)

注册中心 使用什么? Zookeeper 做注册中心 负责服务地址的注册和查找

服务提供者 和 服务消费者 在启动的时候与服务中心交互

调用方 通过注册中心 找到服务提供方

Linux 改名 mv 要改的名字

运行 ./zkServer.sh start

dubbox jar包 并没有上传到 中央仓库

需要手动安装到 本地仓库

离线约束

演示 小demo

因为 每个服务都是部署到单独的服务器里

所以选择 war 形式打包

  • 使用@Service 注解是 dubbox的注解

否则不会被注册中心查到

appliactionContext.xml 中配置 注册中心

dubbo : application 当前 应用名

dubbo : registry address =”注册中心地址”

dubbo : annotation 包扫描

pinyougou-server

Linux 终端下 su root 输入密码

cd ~

进入目录

创建Maven工程pinyougou-parent (POM) ,

groupId 为com.pinyougou

artifactId 为pinyougou-parent ,

在pom.xml中添加锁定版本信息dependencyManagement与pluginManagement

新建下面几个模块

pinyougou-common 通用模块层

pinyougou-pojo 实体类

pinyougou-dao 持久层 数据访问层

———————- 依赖pinyougou-pojo

pinyougou-sellergoods-interface 商家商品服务接口

pinyougou-sellergoods-service 商家商品服务接口实现 (服务的提供方)

pinyougou-shop-web 商家管理后台 war

pinyougou-manager-web 运营商管理后台 war

商家接口类 jar

Controller中的注解

1
2
3
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;
import com.alibaba.dubbo.config.annotation.Reference;

Day02

前端引入分页需要的文件

pagination.js

分页控件加载时 触发 查询所有信息的方法

Day06

商品一级, 二级,三级 模版分类

arg1 : 当arg0改变的时候出发的方法

变量监控 $scope.$watch(‘要监控的变量’, function(new )) ;

脏读 读到未提交的数据

虚读 不可重复读 两次读到的数据不一致

幻读 两次读取的数量不一致