美文网首页
SpringCloud集成Zuul实现限流

SpringCloud集成Zuul实现限流

作者: 狂飙的蜗牛_013d | 来源:发表于2019-01-07 15:07 被阅读0次

    pom.xml 添加依赖

     <dependency>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    </dependency>
    <dependency>
         <groupId>com.marcosbarbero.cloud</groupId>
         <artifactId>spring-cloud-zuul-ratelimit</artifactId>
         <version>2.0.0.RELEASE</version>
    </dependency>
    

    配置application.yml

    spring:
      application:
        name: gateway-server #服务名称
      cloud:
        # 设置偏好网段
        inetutils:
          preferred-networks: 127.0.0.
        loadbalancer:
          retry:
            enabled: true
      jackson:
        date-format: yyyy-MM-dd
        joda-date-time-format: yyyy-MM-dd HH:mm:ss
        time-zone: GMT+8
      redis:
        host: 127.0.0.1
        port: 6379
        timeout: 1000ms
        database: 0
        lettuce:
          pool:
            max-active: 8
            max-wait: -1ms
            max-idle: 8
            min-idle: 0
      zipkin:
        enabled: true
        base-url: http://zipkin-dashboard/
    
    
    zuul:
      routes:
        user-service:
          path: /user/**
          serviceId: user-service
      add-host-header: true
      sensitive-headers: Access-Control-Allow-Origin,Access-Control-Allow-Methods
      strip-prefix: true
      ratelimit:
        # 开启限流
        enabled: true
        # 存储方式
        repository: REDIS
        # 限流策略
        policies:
          # 指定限流服务
          user-service:
            # 每个周期内请求次数
            limit: 3
            # 单位时间内允许访问的总时间
            quota: 30
            # 周期时间
            refresh-interval: 60
            # 限流方式 USER 根据用户;ORIGIN 原始请求;URL 请求地址;
            type: ORIGIN
    server:
      port: 9001    # 端口号
    
    eureka:
      client:
        serviceUrl:
          # 服务器注册/获取服务器的zone
          defaultZone: http://127.0.0.1:9000/eureka/
        healthcheck:
          enabled: true
      instance:
        prefer-ip-address: true
    
    

    配置说明

    zuul.ratelimit.repository 存储方式

    • InMemoryRateLimiter - 使用 ConcurrentHashMap作为数据存储
    • ConsulRateLimiter - 使用 Consul 作为数据存储
    • RedisRateLimiter - 使用 Redis 作为数据存储
    • SpringDataRateLimiter - 使用 数据库 作为数据存储

    zuul.ratelimit.policies 限流策略

    limit 每个周期内请求次数
    quota 单位时间内允许访问的总时间
    refresh-interval 周期时间
    type 限流方式 USER 根据用户;ORIGIN 原始请求;URL 请求地址;
    

    正常访问

    正常访问

    超出次数访问


    超出次数

    相关文章

      网友评论

          本文标题:SpringCloud集成Zuul实现限流

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