• Java之SpringCloud Alibaba【八】【Spring Cloud微服务Gateway整合sentinel限流】


    Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】跳转
    Java之SpringCloud Alibaba【二】【微服务调用组件Feign】跳转
    Java之SpringCloud Alibaba【三】【微服务Nacos-config配置中心】跳转
    Java之SpringCloud Alibaba【四】【微服务 Sentinel服务熔断】跳转
    Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】跳转
    Java之SpringCloud Alibaba【六】【Alibaba微服务分布式事务组件—Seata】跳转
    Java之SpringCloud Alibaba【七】【Spring Cloud微服务网关Gateway组件】跳转
    Java之SpringCloud Alibaba【八】【Spring Cloud微服务Gateway整合sentinel限流】跳转
    Java之SpringCloud Alibaba【九】【Spring Cloud微服务Skywalking】跳转

    一、Gateway整合sentinel限流

    网关作为内部系统外的一层屏障,对内起到-定的保护作用,限流便是其中之- - .网关层的限流可以简单地针对不同路由进行限流,也可针对业务的接口进行限流,或者根据接口的特征分组限流。

    1、添加依赖

    在这里插入图片描述

    <dependency>
    	<groupId>com.alibaba.cloudgroupId>
    	<artifactId>spring-cloud-alibaba-sentinel-gatewayartifactId>
    dependency>
    <dependency>
    	<groupId>com.alibaba.cloudgroupId>
    	<artifactId>spring-cloud-starter-alibaba-sentinelartifactId>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、添加配置

    在这里插入图片描述

    server:
      port: 8088
    spring:
      application:
        name: api-gateway
    # gateway的配置
      cloud:
        gateway:
          routes:
            - id: order_route #路由的唯一标识,路由到order
              uri: lb://order-service # 需要转发的地址  lb指的是从nacos中按照名称获取微服务,并遵循负载均衡策略 order-service服务名
              #断言规则 用于路由规则的匹配
              predicates:
                - Path=/order/**
                  # http://localhost:8088/order-serve/order/add  路由到↓
                  # http://localhost:8020/order-serve/order/add
                #- After=2020-10-19T09:07:00.660+08:00[Asia/Shanghai]
                #- Header=X-Request-Id, \d+
                #- Method=GET
                #- Query=name,xushu|zhuge
                #- CheckAuth = xushu
              #filters:
                #- AddRequestHeader=X-Request-color,red
                #- AddRequestParameter=color,blue
                #- PrefixPath=/mall-order #添加前缀对应微服务需要配置context-path
                #- StripPrefix=1 # 转发之前,去掉第一次的路径
                # http://localhost:8020/order/add
                #- RedirectTo=302, https://www.baidu.com
                #- SetStatus= 404
                #- CheckAuth=xushu
            #- id: stock_route
        # 配置Nacos
          # 跨域的配置
     #     globalcors:
     #       cors-configurations:
     #         '[/**]': # 允许跨域访问的资源
     #           allowedOrigins: "*" #跨域允许的来源 例如:www.smsm.com
     #           allowedMethods:
     #             - GET
     #             - POST
     #             - PUT
    
        #配置Nacos
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848
            username: nacos
            password: nacos
        # 配置sentinel
        sentinel:
          transport:
            dashboard: 127.0.0.1:8858
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    3、完善测试接口

    下载:sentinel-dashboard-1.8.0.jar

    https://github.com/alibaba/Sentinel/releases
    在这里插入图片描述
    运行jar包

    java -Dserver.port=8858 -Dsentinel.dashboard.auth.username=xushu -Dsentinel.dashboard.auth.password=123456 -jar C:\Users\ZHENG\Desktop\sentinel-dashboard-1.8.0.jar
    
    • 1

    访问:http://localhost:8858/

    账号:xushu
    密码:123456

    在这里插入图片描述
    http://127.0.0.1:8088/order/add

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    访问:http://127.0.0.1:8088/order/add

    在这里插入图片描述
    不断点击连续访问
    在这里插入图片描述

    二、通过代码实现限流

    1、编写配置类

    在这里插入图片描述
    在这里插入图片描述

    @Configuration
    public class GatewayConfig {
        @PostConstruct //设置初始化的时候
        public void init(){
            BlockRequestHandler blockRequestHandler = new BlockRequestHandler() {
                @Override
                public Mono<ServerResponse> handleRequest(ServerWebExchange serverWebExchange, Throwable t) {
                    System.out.println(t);
                    HashMap<String,String> map = new HashMap<String,String>();
                    map.put("code",HttpStatus.TOO_MANY_REQUESTS.toString());
                    map.put("message","限流了");
                    //自定义的异常处理
                    return ServerResponse.status(HttpStatus.OK)
                            .contentType(MediaType.APPLICATION_JSON)
                            .body(BodyInserters.fromValue(map))
                            ;
                }
            };
            GatewayCallbackManager.setBlockHandler(blockRequestHandler);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    在这里插入图片描述
    访问:http://127.0.0.1:8088/order/get

    在这里插入图片描述
    在这里插入图片描述
    访问:http://127.0.0.1:8088/order/get
    在这里插入图片描述
    连续不断访问
    在这里插入图片描述

    三、通过配置文件实现

    在这里插入图片描述

          scg:
            fallback:
              mode: response
              response-body: "{code:'',messageL:''}"
    
    • 1
    • 2
    • 3
    • 4

    四、网管高可用

    为了保证Gateway的高可用性,可以同时启动多个Gateway实例进行负载,在Gateway的.上游使用Nginx或者F5进行负载转发以达到高可用。
    在这里插入图片描述
    在这里插入图片描述

    Java之SpringCloud Alibaba【一】【Nacos一篇文章精通系列】跳转
    Java之SpringCloud Alibaba【二】【微服务调用组件Feign】跳转
    Java之SpringCloud Alibaba【三】【微服务Nacos-config配置中心】跳转
    Java之SpringCloud Alibaba【四】【微服务 Sentinel服务熔断】跳转
    Java之SpringCloud Alibaba【五】【微服务 Sentinel整合openfeign进行降级】跳转
    Java之SpringCloud Alibaba【六】【Alibaba微服务分布式事务组件—Seata】跳转
    Java之SpringCloud Alibaba【七】【Spring Cloud微服务网关Gateway组件】跳转
    Java之SpringCloud Alibaba【八】【Spring Cloud微服务Gateway整合sentinel限流】跳转
    Java之SpringCloud Alibaba【九】【Spring Cloud微服务Skywalking】跳转
  • 相关阅读:
    Qt之随机数
    使用 vve-i18n-cli 来一键式自动化实现国际化
    Connor学Android - Drawable
    山西电力市场日前价格预测【2023-09-20】
    异地寄件教程分析
    【Elasticsearch系列七】索引 crud
    Java基础-day05
    俄罗斯方块游戏开发教程6:形状停靠
    ACM算法学习路线、清单
    软注意力和硬注意力的对比
  • 原文地址:https://blog.csdn.net/qq_44757034/article/details/134153614