第三十六章 1024电商平台-Gateway网关引入和功能测试

第1集 1024电商平台网关Gateway项目开发和配置

简介:网关Gateway项目开发和配置

  • 依赖添加
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-gateway</artifactId>
        </dependency>

        <!--添加nacos客户端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>


        <!--配置中心-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
  • 启动类配置
  • 路由映射配置
server:
  port: 8889

spring:
  application:
    name: api-gateway
  cloud:
    #注册中心地址
    nacos:
      discovery:
        server-addr: 112.74.55.160:8848
    gateway:
      routes: #数组形式
        - id: product-service  #商品服务 路由唯一标识
          uri: lb://xdclass-product-service  #从nocas进行转发
          order: 1 #优先级,数字越小优先级越高

          predicates: #断言 配置哪个路径才转发,前端访问路径统一加上XXX-server,网关判断转发对应的服务,如果是回调业务记得修改
            - Path=/product-server/**
          filters: #过滤器,请求在传递过程中通过过滤器修改
            - StripPrefix=1  #去掉第一层前缀,转发给后续的路径
            
      #开启网关拉取nacos的服务
      discovery:
        locator:
          enabled: true

#设置日志级别,ERROR/WARN/INFO/DEBUG,默认是INFO以上才显示
logging:
  level:
    root: INFO
    com.alibaba.nacos.client.config.impl: WARN

第2集 1024电商平台整体功能测试验证《上》

简介:1024电商平台整体功能测试验证《上》

  • 用户微服务验证
  • 优惠券微服务验证
  • 商品微服务验证
    image-1660111359805

第3集 1024电商平台整体功能测试验证《下》

简介:1024电商平台整体功能测试验证《下》

  • 订单微服务验证

  • 大部业务功能都完成了,接下去就是微服务全家桶引入+容器编排部署

第三十七章 微服务配置中心引入和Sentinel限流配置

第1集 1024电商平台Nacos配置中心开发和配置

简介:微服务配置中心引入和配置

  • 配置中心引入-common项目添加
 <!--配置中心-->
       <dependency>
           <groupId>com.alibaba.cloud</groupId>
           <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
       </dependency>
  • 配置文件优先级讲解
    • 不能使用原先的application.yml, 需要使用bootstrap.yml作为配置文件
    • 配置读取优先级 bootstrap.yml > application.yml
  • 配置实操
    • 服务迁移配置
    • 增加bootstrap.yml
spring:
  application:
    name: xdclass-order-service
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 #Nacos配置中心地址
        file-extension: yaml #文件拓展格式

  profiles:
    active: dev
  • 启动微服务服务验证
    • 测试是否可以获取配置
浏览器访问 
http://127.0.0.1:8848/nacos/v1/cs/configs?dataId=xdclass-coupon-service-dev.yaml&group=DEFAULT_GROUP

部分同学如果出现 config dta not exist 建议重启nacos

除开上述问题,如果还是拉取不到配置(保持和课程版本,文件名一样先)

重新构建下项目 

mvn clean package -U

然后重启IDEA
  • dataId组成,在 Nacos Spring Cloud 中,dataId 的完整格式如下
${prefix}-${spring.profiles.active}.${file-extension}

prefix 默认为 spring.application.name 的值

spring.profiles.active 即为当前环境对应的 profile
当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}

file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。

image-1660111416212

第2集 微服务Nacos配置中心迁移和功能验证

简介:1024电商平台Nacos配置中心开发和功能验证

  • 微服务配置迁移
  • 微服务功能验证

第3集 高并发下的限流神器Sentinel容器化部署

简介:Sentinel容器化部署

  • 什么是Sentinel

    • 阿里巴巴开源的分布式系统流控工具
    • 以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度保护服务的稳定性
    • 丰富的应用场景:消息削峰填谷、集群流量控制、实时熔断下游不可用应用等
    • 完备的实时监控:Sentinel 同时提供实时的监控功能
    • 提供开箱即用的与其它开源框架/库的整合模块,例如与 Spring Cloud、Dubbo、gRPC 的整合
      image-1660111432393
  • 文档:https://github.com/alibaba/Sentinel/wiki/控制台

  • Sentinel 分为两个部分

    • 核心库(Java 客户端)不依赖任何框架/库,能够运行于所有 Java 运行时环境,同时对 Dubbo、Spring Cloud 等框架也有较好的支持。
    • 控制台(Dashboard)基于 Spring Boot 开发,打包后可以直接运行,不需要额外的 Tomcat 等应用容器。
  • docker容器化部署sentinel

docker pull bladex/sentinel-dashboard:latest
  • 查看镜像
docker images
  • 启动Sentinel
docker run --name sentinel -d -p 8858:8858  镜像id
  • 访问Sentinel(记得检查防火墙或者网络安全组)
http://公网ip:8858

# 登录密码默认sentinel/sentinel

第4集 微服务整合Sentinel项目依赖配置

简介:微服务整合Sentinel项目依赖配置

  • common项目添加依赖(网关也需要添加)
<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
  • 多个微服务接入Sentinel配置
spring:
  cloud:
    sentinel:
      transport:
        dashboard: 192.168.0.88:8858
        port: 9999 

#dashboard: 8858 控制台端口
#port: 9999 本地启的端口,随机选个不能被占用的,与dashboard进行数据交互,会在应用对应的机器上启动一个 Http Server,该 Server 会与 Sentinel 控制台做交互, 若被占用,则开始+1一次扫描
  • 微服务注册上去后,由于Sentinel是懒加载模式,所以需要访问微服务后才会在控制台出现

第5集 网关+微服务Sentinel限流实战和问题引出

简介:微服务Sentinel限流配置实战和问题引出

  • 优惠券列表接口限流配置

    • 其他的根据实际情况配置
  • 默认是在微服务内存中,重启后就丢失

    • 解决:持久化配置到配置中心Nacos, 并落地数据库
  • 流控协议不明显

    • Blocked by Sentinel (flow limiting)
  • 影响接口性能的点

    • 代码
    • CPU、内存
    • 带宽、IO

第6集 微服务整合Sentinel自定义降级异常数据开发实战

简介:微服务整合Sentinel自定义降级异常数据开发实战

  • 异常种类

    FlowException  //限流异常
    DegradeException  //降级异常
    ParamFlowException //参数限流异常
    SystemBlockException //系统负载异常
    AuthorityException //授权异常
    
  • 【新版】实现BlockExceptionHandler并且重写handle方法

    @Component
    public class XdclassUrlBlockHandler implements BlockExceptionHandler {
        @Override
        public void handle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, BlockException e) throws IOException {
        
        }
    }
    

第7集 生产环境-Sentinel流控规则持久化到nacos配置中心《上》

简介:微服务Sentinel流控规则持久化到nacos配置中心

<dependency>
           <groupId>com.alibaba.csp</groupId>
           <artifactId>sentinel-datasource-nacos</artifactId>
</dependency>

  • 配置持久化数据源
  #流控面板ip
    sentinel:
      transport:
        dashboard: 112.74.55.160:8858
    #流控规则持久化到nacos配置中心
      datasource:
        ds1:
          nacos:
            server-addr: 192.168.0.88:8848
            data-id: ${spring.application.name}.json
            group-id: DEFAULT_GROUP
            data-type: json
            rule-type: flow
  • 配置中心配置
[
    {
        "resource":"/test",
        "controlBehavior":0,
        "count":2,
        "grade":1,
        "limitApp":"default",
        "strategy":0
    },
    {
        "resource":"/api/coupon/v1/page_coupon",
        "controlBehavior":0,
        "count":1,
        "grade":1,
        "limitApp":"default",
        "strategy":0
    }
]
  • 解释
resource:资源名,
limitApp:流控针对的调用来源,若为 default 则不区分调用来源
grade:限流类型(QPS 或并发线程数),0代表根据并发数量来限流,1代表根据QPS来进行流量控制
count:限流阈值
strategy:调用关系限流策略
controlBehavior:流量控制效果(直接拒绝、Warm Up、匀速排队)
clusterMode:是否为集群模式,存在问题

第8集 生产环境-Sentinel流控规则持久化到nacos配置中心《下》

简介:微服务Sentinel流控规则持久化到nacos配置中心

  • 流控规则持久化测试

  • 如果再sentinel控制台修改了配置,会不会反向同步到nacos里???

    • 再sentinel控制台修改不会同步到nacos
    • 如果要修改策略,只能在nacos里面修改
  • 集群流控问题

  • 限流测试-重启微服务

  • 每个微服务都没做流控限制(优惠券微服务只是做了一个配置的例子)