1、简介
品优购网上商城是一个综合性的 B2B2C 平台,类似京东商城、天猫商城。网站采用商家入驻的模式,商家入驻平台提交申请,有平台进行资质审核,审核通过后,商家拥有独立的管理后台录入商品信息。商品经过平台审核后即可发布。
品优购网上商城主要分为网站前台、运营商后台、商家管理后台三个子系统
1.1、网站前台:主要包括网站首页、商家首页、商品详细页、、搜索页、会员中心、订单与支付相关页面、秒杀频道等。
1.2、运营商后台:是运营商的运营人员的管理后台。主要包括商家审核、品牌管理、规格管理、模板管理、商品分类管理、商品审核、广告类型管理、广告管理、订单查询、商家结算等。
1.3、商家管理后台:入驻的商家进行管理的后台,主要功能是对商品的管理以及订单查询统计、资金结算等功能。
1.4、SOA架构:是一种支持面向服务的架构样式。从服务、基于服务开发和服务的结果来看,面向服务是一种思考方式;随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,迫切需一个治理系统确保架构有条不紊的演进。
2、电商架构图和表结构
2.1、表结构
品牌: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
2.2、所涉及的技术
框架组合:前后端采用 Ajax交互
后端框架Spring +SpringMVC+mybatis +Dubbox
前端angularJS + Bootstrap
2.3、Dubbox框架介绍和架构图
Dubbox 致力于提供高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案。
简单的说,dubbox就是个服务框架,如果没有分布式的需求,其实是不需要用的,只
有在分布式的时候,才有dubbox这样的分布式服务框架的需求,并且本质上是个服务
调用的东西,说白了就是个远程服务调用的分布式框架。
节点角色说明:
• Provider: 暴露服务的服务提供方。
• Consumer: 调用远程服务的服务消费方。
• Registry: 服务注册与发现的注册中心。
• Monitor: 统计服务的调用次调和调用时间的监控中心。
• Container: 服务运行容器。
调用关系说明:
• 0. 服务容器负责启动,加载,运行服务提供者。
• 1. 服务提供者在启动时,向注册中心注册自己提供的服务。
• 2. 服务消费者在启动时,向注册中心订阅自己所需的服务。
• 3. 注册中心返回服务提供者地址列表给消费者,如果有变更,注册中心将基于长连接推送变更数据给消费者。
• 4. 服务消费者,从提供者地址列表中,基于软负载均衡算法,选一台提供者进行调用,如果调用失败,再选另一台调用。
• 5. 服务消费者和提供者,在内存中累计调用次数和调用时间,定时每分钟发送一次统计数据到监控中心。
注册中心使用Zookeeper:注册中心负责服务地址的注册与查找,相当于目录服务,服务提供者和消费者只在启动时与注册中心交互,注册中心不转发请求,压力较小。
3、创建项目说明
3.1、工程结构
工程说明:
pinyougou-parent 聚合工程
pinyougou-pojo 通用实体类层
pinyougou-dao 通用数据访问层
pinyougou-xxxxx-interface 某服务层接口
pinyougou-xxxxx-service 某服务层实现
pinyougou-xxxxx-web 某web工程
Day01创建:
pinyougou-parent(POM)
pinyougou-pojo(jar)
pinyougou-dao(jar)
pinyougou-common(jar)
pinyougou-sellergoods-interface(jar)
pinyougou-sellergoods-service(war)
pinyougou-manager-web(war)
pinyougou-shop-web(war)
端口名规则:所有的服务工程端口:900X、所有的web工程端口910X
4、Dubbox的入门Demo
服务提供方:
import com.alibaba.dubbo.config.annotation.Service;
import com.kid.dubbox.service.UserService;
@Service
public class UserServiceImpl implements UserService {
@Override
public String getName() {
return "I'm a kid";
}
}
<dubbo:application name="dubboxdemo-service"/>
<dubbo:registry address="zookeeper://192.168.25.128:2181"/>
<dubbo:annotation package="com.kid.dubbox.service"/>
服务消费方:
@Controller
@RequestMapping("/user")
public class Snippet {
@Reference //import com.alibaba.dubbo.config.annotation.Reference;、
private UserService userService;
@RequestMapping("/showName")
@ResponseBody
public String showName(){
return userService.getName();
}
}
<dubbo:application name="dubboxdemo-web"/>
<dubbo:registry address="zookeeper://192.168.25.128:2181"/>
<dubbo:annotation package="com.kid.dubbox.controller" />
启动的时候先启动服务,再启动消费方