网上商城
截图展示
声明
- 未经许可不得将本项目商用,如需商用请联系作者zxr@tju.edu.cn
- 欢迎各位看官向本项目提交代码,对提交的分支我将进行合并。提交时请务必保证能编译能运行
关键技术
基于SpringCloud框架开发的商城系统,代码严格遵循MVC分层思想,可部署到服务器上,设计精良,不断完善
包结构说明
- com.supermarket.*.filter对应于微服务的过滤器
- com.supermarket.*.listener对应于微服务的监听器
- com.supermarket.*.controller对应于微服务的controller层
- com.supermarket.*.aspect对应于微服务的切面类
- com.supermarket.*.service对应于微服务的service层
- com.supermarket.*.dao对应于微服务的持久层
- com.supermarket.*.schedule对应于微服务的定时任务
- com.supermarket.*.exception对应于微服务的自定义异常
- com.supermarket.*.domain对应于微服务的JavaBean
- com.supermarket.*.utils对应于微服务的工具类
- com.supermarket.*.vo对应于微服务的ViewObject
系统架构
功能说明
用户微服务(com.supermarket.user)
- 用户登录
- 免验证码登录
- 用户注册
- 用户登出
- 用户名可用性校验
- 用户登录状态获取
- 查询用户权限等级
商品微服务(com.supermarket.product)
- 分页查询
- 单个商品查询
- 商品新增
- 商品修改
- 查询全部商品
公共资源微服务(com.supermarket.common)
- 公共资源微服务同时也是SpringCloud的Eureka模块
- 提供了常用的JavaBean, ViewObject, 工具类
zuul网关(com.supermarket.gateway)
- SpringCloud的zuul网关模块
- 对敏感API调用进行后端鉴权
图片微服务(com.supermarket.image)
- 图片上传功能
- 生成验证码功能
- 清除验证码在redis中的缓存
购物车微服务(com.supermarket.cart)
- 购物车查询
- 购物车新增商品
- 购物车删除商品
- 购物车修改商品
- 购物车价格查询
订单微服务(com.supermarket.order)
- 新增订单
- 删除订单
- 查询订单
检索微服务(com.supermarket.search)
- 分页检索
- 新增商品
- 删除商品
- 建立索引
秒杀微服务(com.supermarket.instantbuy)
- 全部秒杀商品查询
- 单个秒杀商品查询
- 发起秒杀
新版本部署教程
- 环境准备
- 开发环境准备:首先你需要有一台电脑、以及一个虚拟机(或服务器)。内存要大,不然跑不起来。假设你的虚拟机的ip地址是192.168.137.147在你的电脑中把hosts追加两行。
192.168.137.147 www.supermarket.com
192.168.137.147 image.supermarket.com
然后添加环境变量
DOCKER_HOST=tcp://192.168.137.147:2375
- 部署环境准备:虚拟机装上centos7,再装上docker,然后依次拉取镜像
docker pull zongxr/redis:3.2.11
docker pull zongxr/mycat:1.15.1
docker pull zongxr/mysql:5.7.37
docker pull zongxr/elasticsearch:6.8.6
docker pull zongxr/supermarket-cart:1.0-SNAPSHOT
docker pull zongxr/supermarket-user:1.0-SNAPSHOT
docker pull zongxr/supermarket-gateway:1.0-SNAPSHOT
docker pull zongxr/supermarket-eureka:1.0-SNAPSHOT
docker pull zongxr/supermarket-image:1.0-SNAPSHOT
docker pull zongxr/supermarket-search:1.0-SNAPSHOT
docker pull zongxr/supermarket-instantbuy:1.0-SNAPSHOT
docker pull zongxr/supermarket-product:1.0-SNAPSHOT
docker pull zongxr/supermarket-order:1.0-SNAPSHOT
然后把start_up目录拷贝到/home目录下
- 开发环境准备:首先你需要有一台电脑、以及一个虚拟机(或服务器)。内存要大,不然跑不起来。假设你的虚拟机的ip地址是192.168.137.147在你的电脑中把hosts追加两行。
- 部署数据库
- 参照数据库启动脚本逐行执行,或直接运行该脚本。
- 由于官方的mysql镜像没有默认开启主从配置,也没设定UTF-8字符集,因此使用本项目专有镜像zongxr/mysql:5.7.37,可自动开启bin-log,并设定UTF-8字符集
- 该脚本制作了双向主从高可用的数据分片,节点分别为dn1_host1, dn1_host2, dn2_host1, dn2_host2。并且通过mycat实现了读写分离以及分库分表,最后灌入数据。如果上一步执行成功了,你将能够通过以下的JDBC连接上数据库
jdbc:mysql://192.168.137.147:3306/supermarket
连接dn1_host1
jdbc:mysql://192.168.137.147:3307/supermarket
连接dn1_host2
jdbc:mysql://192.168.137.147:3308/supermarket
连接dn2_host1
jdbc:mysql://192.168.137.147:3309/supermarket
连接dn2_host2
jdbc:mysql://192.168.137.147:8066/supermarket
连接mycat
- 部署redis集群
- 参照redis启动脚本逐行执行,或者直接运行该脚本
- 该脚本搭建了一个6节点的redis集群,从redis-1到redis-6。由于3.2.11版本的redis官方镜像没有预置ruby环境,而创建集群需要使用ruby环境。因此使用该项目的专用redis镜像zongxr/redis:3.2.11,该镜像已经集成了ruby环境可直接使用。
- 如果上一步redis集群部署成功了,那么可以通过6379端口连接该集群
- 部署elasticsearch集群
- 参照elasticsearch启动脚本逐行执行,或直接运行该脚本
- 该脚本搭建了3节点的elasticsearch集群,分别是es-1, es-2, es-3。如果部署成功了,可以使用head插件连接http://192.168.137.147:9200/地址,集群状态应为green
- 官方默认的elasticsearch镜像不带JDBC连接功能,该项目通过技术手段集成了JDBC连接功能,可以像操作关系型数据库一样写SQL去操作elasticsearch。使用的driver是
org.elasticsearch.xpack.sql.jdbc.EsDriver
jdbc:es://192.168.137.147:9201
连接es-1
jdbc:es://192.168.137.147:9202
连接es-2
jdbc:es://192.168.137.147:9200
连接es-3
- 部署微服务
- 参照微服务启动脚本逐行执行,或直接运行该脚本
- 每个微服务做了一个镜像,名为zongxr/supermarket-xxx:tag。如果所有微服务都启动成功了,那么将能够在注册中心看到所有注册的微服务,并且在http://192.168.137.147:APP_PORT/swagger-ui/网址能够看到该微服务对应的接口文档
- instant-buy微服务用到了消息队列rabbitmq。如果消息队列启动成功,将能够在Web UI管理界面看到传输的消息,用户名密码均为guest
- 至此,所有服务都已经启动完成了。访问www.supermarket.com进行访问即可。
旧版本部署教程
交流群
点击链接加入群聊【Supermarket项目交流群】:https://jq.qq.com/?_wv=1027&k=wlpUy5jo版本迭代
版本号 | 更新内容 | 上传时间 |
---|---|---|
0.1 |
| 2020年8月3日 |
0.1.1 |
| 2020年8月7日 |
0.1.2 |
|