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.cloud</groupId>
	<artifactId>spring-cloud-alibaba-sentinel-gateway</artifactId>
</dependency>
<dependency>
	<groupId>com.alibaba.cloud</groupId>
	<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

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

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

访问: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);
    }
}

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

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

三、通过配置文件实现

在这里插入图片描述

      scg:
        fallback:
          mode: response
          response-body: "{code:'',messageL:''}"

四、网管高可用

为了保证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】跳转
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员猫爪

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值