如图1所示,本项目通过Nginx作为跨域访问和负载均衡的工具,也是用户使用本项目功能的唯一入口。整个项目采用分布式部署的思想,不同模块部署在不同的Docker容器中,以达到负载均衡、解耦合以及模块化开发等目的。RabbitMQ在本项目中起到削峰、解耦和发布订阅的功能。削峰、解耦主要用于缓解用户瞬时访问量过大可能导致的服务器瞬时请求过多资源不够的问题,主要作用于用户端后端以及mysql和es的同步中。发布订阅主要用来商家端后端和用户端后端的日志业务和邮件通知业务(用户订阅某一商品或商家的信息之后,若该商品出现降价或该商家有上新等,都将邮件通知到用户)中。而Eureka则作为SpringCloud的重要组件,负责各后端模块的注册更新服务、统一管理和负载均衡等功能。同时为各后端服务提供了统一的端口号:9000。后端项目均统一采用Restful接口设计方式,前端项目均通过后端提供的接口与后端进行交互。
后端端采用 Springboot 进行开发。项目整体结构如下:
com.example.shopping
│ MerchantApplication.java
│
├─config
│ CorsConfiguration.java
│ EsConfiguration.java
│ SecurityConfiguration.java
│ MqConfiguration.java
│ LocaleConfiguration.java //国际化相关配置
│
├─Controller
│ GoodsController.java
│ StoreController.java
│ MerchantController.java
│
├─Mapper
│ GoodsMapper.java
│ StoreMapper.java
│ MerchantMapper.java
│
├─pojo
│ GoodsDTO.java
│ GoodsEntity.java
│ GoodsVO.java
│ StoreDTO.java
│ StoreEntity.java
│ StoreVO.java
│ MerchantDTO.java
│ MerchantEntity.java
│ MerchantVO.java
│
├─Service
│ GoodsService.java
│ StoreService.java
│ MerchantService.java
│
├─ServiceImpl
│ GoodsServiceImpl.java
│ StoreServiceImpl.java
│ MerchantServiceImpl.java
│
├─Aspect
│ LogAspect.java //以AOP的方式进行日志相关操作
│
├─util
│ FileUtil.java
│ UUIDUtil.java
│ EncryptionUtil.java //用于商家密码和商家id的加密、解密
│ MqUtil.java
│ LocaleUtil.java //国际化相关工具
整体访问流程大致如下:通过统一路由中的9000端口,访问实际端口号为9001的商家端后端项目。数据库采用mysql,并用redis进行缓存(端口号6379),每次更新、删除、新增数据到mysql时,都要刷新redis缓存(通过springboot的redis相关注解实现)。前端访问时,除了商品列表、商家列表用es外,其余所有信息均通过Redis访问数据。mq用于日志相关操作。
前端采用 vue-cli 脚手架进行开发,使用了vue-element-admin框架。
注:前端开发手册 vue-element-admin
登陆后的页面如图2所示,也是我们前后端需要新增的功能。
图3 展示了下拉框的布局和内容。
商家端接下来的任务:
与商家端大体相同。增加了 mq 的削峰功能。
采用仿京东 or 淘宝简化后的设计进行布局,页面上要求比商家端好看。
采用 Docker 进行模块的部署,可考虑直接上k8s,然后容器运行时(CRI)选择 Docker。
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。