购买商品
、加入购物车
、下单
评论已购买商品
后台管理商品的上下架
、促销活动
监控商品销售状况
后台处理退款操作
前端结构
使用 vue 架构
node.js :相当于 jdk
webPack:用于热部署;类似于后台的 Tomcat
npm:相当于后台的 Maven
vuetify:提供了vue写的组件
nuxt:
静态资源CDN服务:可以通过 Nginx 直接进行调用。
系统门户 Portal :通过 JWT 鉴权进行权限校验
通过 Nginx 调用后台接口,并进行负载均衡
后端结构
后台微服务和zuul都需要在 Eureka 中进行注册
Eureka 为了保证高可用
可以进行集群部署
Zuul 在进行调用后台服务的时候,需要进行负载均衡
、容错处理
服务间也可以进行通过 Feign 进行调用
数据存储
mysql:
redis:
elasticsearch:索引库,通过RabbitMQ
和 MySQL进行数据同步
商城可以分为两部分:后台管理系统、前台门户系统。
分类
、品牌
、商品规格
等信息的管理订单统计
、订单退款处理
、促销活动
生成等用户控制
、冻结
、解锁
等网站的权限控制
,采用JWT鉴权方案
,对用户
及 API
进行权限控制各种数据的统计分析展示
搜索商品
加入购物车
下单
评价商品等等
前端技术:
后端技术:
为了保证开发环境的统一,希望每个人都按照我的环境来配置:
idea大家可以在我的课前资料中找到。另外,使用帮助大家可以参考课前资料的《idea使用指南.md》
我们在开发的过程中,为了保证以后的生产、测试环境统一。尽量都采用域名来访问项目。
一级域名:www.leyou.com,leyou.com leyou.cn
二级域名:manage.leyou.com/item , api.leyou.com
我们可以通过switchhost工具
来修改自己的host对应的地址,只要把这些域名指向127.0.0.1,那么跟你用localhost的效果是完全一样的。
switchhost可以去课前资料寻找。
用来管理依赖及其版本,注意是创建project,而不是module
我们的注册中心,起名为:excellent-registry
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-serverartifactId>
dependency>
dependencies>
server:
port: 9090
spring:
application:
name: excellent-registry
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:${server.port}/eureka
register-with-eureka: false # 把自己注册到 eureka 服务列表
fetch-registry: false # 拉取eureka服务信息
server:
enable-self-preservation: false # 关闭自我保护
eviction-interval-timer-in-ms: 5000 # 每隔5秒钟,进行一次服务列表的清理
Failed to load property source from location 'classpath:/application.yml'
解决办法:
- 1、改正文件中存在错误语法的地方。
- 2、File–>Settings–>File Encodings
这三个地方设置成UTF-8格式。重启启动项目。- 3、如第一步并未解决问题,则可以用第二步(终极杀招)。
删除application.yml文件中所有中文注释。
<dependencies>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-zuulartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
dependencies>
server:
port: 10010
spring:
application:
name: leyou-gateway
eureka:
client:
registry-fetch-interval-seconds: 5
service-url:
defaultZone: http://127.0.0.1:10086/eureka
zuul:
prefix: /api # 路由路径前缀
@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public class ExcellentGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ExcellentGatewayApplication.class, args);
System.out.println("Gateway Startup success!!!");
}
}
既然是一个全品类的电商购物平台,那么核心自然就是商品。因此我们要搭建的第一个服务,就是商品微服务。其中会包含对于商品相关的一系列内容的管理,包括:
因为与商品的品类相关,工程命名为excellent-item
.
需要注意的是,我们的excellent-item
是一个微服务,那么将来肯定会有其它系统需要来调用服务中提供的接口,获取的接口数据,也需要对应的实体类来封装
,因此肯定也会使用到接口中关联的实体类。
因此这里我们需要使用聚合工程,将要提供的接口及相关实体类放到独立子工程中,以后别人引用的时候,只需要知道坐标即可。
我们会在leyou-item中创建两个子工程:
聚合模块
】起名为:excellent-item
选择新建module:(具体方式如上所示)
它是一个聚合模块,所以需要使用 pom.xml 中进行声明
<packaging>pompackaging>
此时可以删除 excellent-item 工程的 src 目录
接下来我们给excellent-item-service
中添加依赖:
思考一下我们需要什么?
excellent-item-interface
中的实体类 <dependencies>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-webartifactId>
dependency>
<dependency>
<groupId>org.springframework.cloudgroupId>
<artifactId>spring-cloud-starter-netflix-eureka-clientartifactId>
dependency>
<dependency>
<groupId>org.mybatis.spring.bootgroupId>
<artifactId>mybatis-spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>tk.mybatisgroupId>
<artifactId>mapper-spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>com.github.pagehelpergroupId>
<artifactId>pagehelper-spring-boot-starterartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-jdbcartifactId>
dependency>
<dependency>
<groupId>mysqlgroupId>
<artifactId>mysql-connector-javaartifactId>
dependency>
<dependency>
<groupId>com.excellent.itemgroupId>
<artifactId>excellent-item-interfaceartifactId>
<version>1.0.0-SNAPSHOTversion>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-actuatorartifactId>
dependency>
<dependency>
<groupId>org.springframework.bootgroupId>
<artifactId>spring-boot-starter-testartifactId>
dependency>
dependencies>
server:
port: 8080
spring:
application:
name: item-service
datasource:
url: jdbc:mysql://localhost:3306/market
username: root
password: root
hikari:
max-lifetime: 28830000 # 一个连接的生命时长(毫秒),超时而且没被使用则被释放(retired),缺省:30分钟,建议设置比数据库超时时长少30秒,参考MySQL wait_timeout参数(show variables like '%timeout%';)
maximum-pool-size: 9 # 连接池中允许的最大连接数。缺省值:10;推荐的公式:((core_count * 2) + effective_spindle_count)
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:9090/eureka
instance:
lease-renewal-interval-in-seconds: 5 # 5秒钟发送一次心跳
lease-expiration-duration-in-seconds: 10 # 10秒不发送就过期
#添加 mybatis 的别名扫描
mybatis:
type-aliases-package: com.excellent.item.pojo
@SpringBootApplication
@EnableDiscoveryClient
public class ExcellentItemServiceApplication {
public static void main(String[] args) {
SpringApplication.run(ExcellentItemServiceApplication.class);
System.out.println("Excellent-Item-ServiceApplication Startup success!!!");
}
}