美文网首页互联网科技码出未来Java
SpringCloud-Zuul高并发请求下的限流处理

SpringCloud-Zuul高并发请求下的限流处理

作者: 码上搞定 | 来源:发表于2019-07-13 11:33 被阅读3次

    高并发的情况肯定是实际场景中经常碰到的情况,那么这种情况下限流措施肯定是必须的,本文我们就来看看zuul中限流的处理

    高并发的限流处理

    1.创建项目

    创建一个SpringCloud项目

    2.添加依赖

    必须要添加 ratelimit依赖

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zuul</artifactId>
        </dependency>
        <dependency>
            <groupId>com.marcosbarbero.cloud</groupId>
            <artifactId>spring-cloud-zuul-ratelimit</artifactId>
            <version>1.3.4.RELEASE</version>
        </dependency>
    </dependencies>
    

    3.配置文件

    在配置文件中添加限流的属性,分为具体限流和全局限流

    server.port=9030
    # eureka注册中心的配置
    eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/
    
    # 定义的两个路由规则
    zuul.routes.e-book-product.path=/product/**
    zuul.routes.e-book-product.serviceId=e-book-product
    zuul.routes.e-book-order.path=/order/**
    zuul.routes.e-book-order.serviceId=e-book-order
    

    3.1 全局限流

    针对每一个服务都有效果

    #全局配置限流
    zuul.ratelimit.enabled=true
    ##60s 内请求超过 3 次,服务端就抛出异常,60s 后可以恢复正常请求
    zuul.ratelimit.default-policy.limit=3
    zuul.ratelimit.default-policy.refresh-interval=60
    ##针对 IP 进行限流,不影响其他 IP
    zuul.ratelimit.default-policy.type=origin
    

    分别启动product和order两个服务,然后启动网关服务,访问测试如下
    product服务:


    一分钟访问的第四次

    order服务:正常访问

    一分钟内访问的第四次

    全局限流配置对每个服务都有效果

    3.2 局部限流

    针对特定的服务指定的限流策略

    # 局部限流:针对某个服务进行限流
    ##开启限流
    zuul.ratelimit.enabled=true
    ##60s 内请求超过 3 次,服务端就抛出异常,60s 后可以恢复正常请求
    zuul.ratelimit.policies.e-book-product.limit=3
    zuul.ratelimit.policies.e-book-product.refresh-interval=60
    ##针对某个 IP 进行限流,不影响其他 IP
    zuul.ratelimit.policies.e-book-product.type=origin
    

    以上配置只针对e-book-product的服务一分钟内最多访问3次,超过就会限流,对其他服务就没有影响。效果可自行演示。

    4.网关限流参数

    5.异常处理

    增对error异常,我们可以提供一个全局异常处理器

    @RestController
    public class ExceptionHandler implements ErrorController{
    
        @Override
        public String getErrorPath() {
            
            return "error";
        }
        
        @RequestMapping(value="/error")
        public String error(){
            return "{\"result\":\"访问太多频繁,请稍后再访问!!!\"}";
        }
    
    }
    

    限流的提示如下:

    相关文章

      网友评论

        本文标题:SpringCloud-Zuul高并发请求下的限流处理

        本文链接:https://www.haomeiwen.com/subject/ifypkctx.html