SpringCloud
- 什么是SpringCloud 
  - 在SpringBoot基础上构建的微服务框架
- 固定步骤 
    - 1.引入组件的启动器
- 2.覆盖默认配置
- 3.在引导类上添加相应的注解
 
 
- eureka 
  - 注册中心,服务的注册与发现
- 服务端 
    - 1.引入服务器启动器:eureka-server
- 2.添加了配置 
      - spring.application.name 服务名
- eureka.client.service-url.defaultZone http://localhost:10086/eureka
- eureka.server.eviction-interval-timer-in-ms 剔除无效连接的间隔时间
- eureka.server.enable-self-preservation 关闭自我保护
 
- 3.@EnableEurekaServer 开启eureka服务端功能
 
- 客户端 
    - 1.引入启动器:eureka-client
- 2.添加配置 
      - spring.application.name
- eureka.client.service-url.defaultZone
- eureka.instance.lease-renewal-interval-in-seconds 心跳时间
- eureka.instance.lease-expiration-duration-in-seconds 过期时间
- eureka.client.register-with-eureka 
        - 是否注册给eureka容器
- 默认true
 
- eureka.client.fetch-registry 
        - 是否拉取服务列表
- 默认true
 
- eureka.client.registry-fetch-interval-seconds 拉取服务的间隔时间
 
- 3.@EnableDiscoveryClient 启用eureka客户端
 
 
- ribbon 
  - 负载均衡组件
- eureka、feign以及zuul已集成
- 配置负载均衡策略 
    - <服务名>.ribbon.NFLoadBalancerRuleClassName 负载均衡策略的全路径
 
- @LoadBalanced 
    - 在RestTenplate的@Bean方法上
 
 
- hystrix 
  - 容错组件
- 降级 
    - 1.引入hystrix的启动器
- 2.添加配置,超时时间的配置
- 3.@EnableCircuitBreaker 启动熔断组件 
      - @SpringCloudApplication 
        - @SpringBootApplication
- @EnableDiscoveryClient
 
 
- @SpringCloudApplication 
        
- 代码 
      - 全局 
        - 返回值和被熔断的方法返回值一致,不能有参数列表
- 在类上@DefaultProperties(defaultFallback=“全局熔断方法名”)
- 在具体的被熔断方法上@HystrixCommand
 
- 局部 
        - 返回值和参数列表与被熔断的方法一致
- 在被熔断的方法上@HystrixCommand
- (fallbackMethod=“熔断方法名”)
 
 
- 全局 
        
 
- 熔断 
    - close 
      - 关闭状态
- 所有请求都正常访问
 
- open 
      - 打开状态
- 所有请求都无法访问
- 触发:连续失败的比例大于50%或者失败次数不少于20次
- 维持5s的休眠时间
 
- half open 
      - 半开状态
- 释放部分请求通过 
        - close 正常
- open 不正常
 
- 触发:休眠时间之后
 
 
- close 
      
 
- feign 
  - 远程调用组件 
    - 集成ribbon和hystrix
- 使代码更加优雅
 
- 1.引入feign的启动器
- 2.feign.hystrix.enable=true 开启熔断
- 3.@EnableFeignClients 开启feign的功能
- 代码 
    - 定义一个接口 
      - @FeignClient(value=“服务名” fallback=实现类.class)
- 方法上的注解使用的是SpringMVC的注解
 
 
- 定义一个接口 
      
 
- 远程调用组件 
    
- zuul 
  - 网关组件 
    - 路由
- 过滤器
 
- 1.引入启动器
- 2.添加配置 
    - 路由的配置
- zuul.prefix 路由前缀
- 四种路由配置方式 
      - 1zuul.routes.<路由名>.path=/service-provider/** zuul.routes.<路由名>.url=http://localhost:8081
- 2zuul.routes.<路由名>.path=/service-provider/** zuul.routes.<路由名>.serviceId=service-provider
- 3zuul.routes.<路由名:服务名>=/service-provider/**
- 4 不配置,默认服务的入口就是以服务名为前缀
 
- 1
 
- 3.@EnableZuulProxy 开启zuul网关组件
- 自定义过滤器 
    - IZuulFilter 
      - 默认的抽象实现类:ZuulFilter
 
- filterType 
      - pre
- post
- route
- error
 
- filterOrder 执行顺序:返回值越小优先级越高
- shouldFilter 
      - 是否执行run方法
- 执行 true
 
- run 过滤器的具体逻辑
- 四种执行顺序 
      - pre–>route–>post
- 异常 
        - 直接执行error–>post,pre或者route出现异常
- error–>响应,post出现异常
- error–>post,error出现异常
 
 
 
- IZuulFilter 
      
 
- 网关组件 
    
项目分类
- 传统项目 
  - 各种企业里面用的管理系统
- 需求方:公司、企业内部
- 盈利模式:项目本身卖钱
- 技术侧重点:业务功能
 
- 互联网分类 
  - 门户网站、电商网站
- 需求方:广大用户群体
- 盈利模式:虚拟币、增值服务、广告收益
- 技术侧重点:网站性能、业务功能
 
常见的电商模式

专业术语

 
项目开发流程
- 项目经理:管人
- 产品经理:设计需求模型
- 测试
- 前端:大前端。UI、前端、nodejs、reactjs、vuejs、mongoDB
- 后端
- 移动端:IOS Android
 
 
项目介绍
- 乐友商城是一个全品类的电商购物网站(B2C)
- 用户可以在线购买商品、加入购物车、下单
- 可以评论已购买商品
- 管理员可以在后台管理商品的上下架、促销活动
- 管理员可以监控商品销售情况
- 客服可以在后台处理退款操作
- 希望未来3到5年可以支持千万用户的使用
系统架构

 
系统架构解读
整个乐友商城可以分为两部分:后台管理系统、前台门户系统。
- 后台管理 
  - 后台系统主要包含以下功能: 
    - 商品管理:包括商品分类、品牌、商品规格等信息的管理
- 销售管理:包括订单统计、订单退款处理、促销活动生成等
- 用户管理:包括用户控制、冻结、解锁等
- 权限管理:整个网站的权限控制,采用JWT鉴权方案,对用户以及API进行权限控制
- 统计:各种数据的统计分析展示
 
- 后台系统会采用前后端分离开发,而且整个后台管理系统会使用Vue.js框架搭建出单页应用(SPA)
 
- 后台系统主要包含以下功能: 
    
- 前台门户 
  - 前台门户面向的是客户,包含与客户交互的一切功能。例如: 
    - 搜索商品
- 加入购物车
- 下单
- 评价商品等等
 
- 前台系统我们会使用Themeleaf模板引擎技术来完成页面开发,处于SEO(搜索引擎)优化的考虑,我们将不采用单页应用。
 
- 前台门户面向的是客户,包含与客户交互的一切功能。例如: 
    
项目搭建
技术选型
- 前端技术 
  - 基础的HTML、CSS、JavaScript(基于ES6标准)
- JQuery
- Vue.js 2.0 以及基于Vue的框架:Vuetify(UI框架)
- 前端构建工具:WebPack
- 前端安装包工具: NPM
- Vue脚手架:Vue-cli
- Vue路由:Vue-router
- ajax框架:axios
- 基于Vue的富文本框架:quill-editor
 
- 后端技术 
  - 基础的SpringMVC、Spring 5.x和Mybatis3
- Spring Boot 2.0.6版本
- Spring Cloud最新版 Finchley.SR2
- Redis-4.0
- RabbitMQ-3.4
- Elasticsearch-6.3
- nginx-1.14.2
- FastDFS-5.0.8
- MyCat
- Thymeleaf
- mysql-5.6
 
开发环境
- IDE:idea2017以上版本
- JDK:JDK1.8
- 项目构建:maven3.3.9以上版本
- 版本控制工具:git
域名
我们在开发过程中,为了保证以后的生产,测试环境统一。尽量都采用域名来访问项目。
 一级域名:www.leyou.com leyou.com leyou.cn
 二级域名:manage.leyou.com/item api.leyou.com
 我们可以通过switchhost来修改自己的host对应的地址,只要把这些域名指向127.0.0.1,那么跟你用localhost的效果是完全一样的



















