Spring Cloud学习笔记7-服务限流 or API限流(Zuul+RateLimiter)


title: “Spring Cloud学习笔记7-服务限流 or API限流(Zuul+RateLimiter)”

url: “https://wsk1103.github.io/

tags:

  • Spring Cloud
  • 学习笔记

备注:

官网http://spring.io/projects/spring-cloud

总纲https://cloud.spring.io/spring-cloud-static/Finchley.SR2/single/spring-cloud.html

JAVA: 1.8 +

MAVEN: 3.5.0 +

Spring Boot:2.0.7.RELEASE

Spring Cloud:Finchley

说明:
RateLimiter :RateLimiter是Google开源的实现了令牌桶算法的限流工具(速率限制器)。http://ifeve.com/guava-ratelimiter/

Spring Cloud Zuul RateLimiter :结合了Zuul对RateLimiter进行了封装,通过实现ZuulFilter提供了服务限流功能

限流粒度/类型说明
Authenticated User针对请求的用户进行限流
Request Origin针对请求的Origin进行限流
URL针对URL/接口进行限流
Service针对服务进行限流,如果没有配置限流类型,则此类型生效

本项目地址:https://github.com/wsk1103/my-spring-cloud


服务限流

延用zuul项目

1. 修改pom.xml,加入新的依赖
<!-- https://mvnrepository.com/artifact/com.marcosbarbero.cloud/spring-cloud-zuul-ratelimit -->
<dependency>
    <groupId>com.marcosbarbero.cloud</groupId>
    <artifactId>spring-cloud-zuul-ratelimit</artifactId>
    <version>2.2.1.RELEASE</version>
</dependency>
//增加redis,配合redis使用
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 修改application.yml

增加了redis配置和rate limit配置

eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/

server:
  port: 8769

spring:
  application:
    name: service-zuul
  redis:
    host: localhost
    port: 6379

zuul:
  routes:
    a:
      path: /a/**
      serviceId: service-client
    b:
      path: /b/**
      serviceId: service-feign
  ratelimit:
    key-prefix: wsk
    enabled: true
    repository: REDIS
    behind-proxy: true
    default-policy-list: #optional - will apply unless specific policy exists
      - limit: 1 #optional - request number limit per refresh interval window
        quota: 1 #optional - request time limit per refresh interval window (in seconds)
        refresh-interval: 3 #default value (in seconds)
#        type: #optional
#          - user
#          - origin
#          - url
    policy-list:
      a: #需要和服务同名
        - limit: 10 #optional - request number limit per refresh interval window
          quota: 100 #optional - request time limit per refresh interval window (in seconds)
          refresh-interval: 30 #default value (in seconds)
      b:
        - limit: 1 #optional - request number limit per refresh interval window
          quota: 1 #optional - request time limit per refresh interval window (in seconds)
          refresh-interval: 3 #default value (in seconds)
#          type: #optional
#            - user
#            - origin
#            - url
#          type: #optional value for each type
#            - user=anonymous
#            - origin=somemachine.com
#            - url=/api #url prefix
#            - role=user
结果实例

image

参数说明

Property namespace: zuul.ratelimit

Property nameValuesDefault Value说明
enabledtrue/falsefalse是否启用限流
behind-proxytrue/falsefalse
key-prefixString${spring.application.name:rate-limit-application}限流key前缀
repositoryCONSUL, REDIS, JPA, BUCKET4J_JCACHE, BUCKET4J_HAZELCAST, BUCKET4J_INFINISPAN, BUCKET4J_IGNITE-必填,使用redis即可
default-policy-listList of Policy-默认策略
policy-listMap of Lists of Policy-自定义策略
postFilterOrderintFilterConstants.SEND_RESPONSE_FILTER_ORDER - 10postFilter过滤顺序
preFilterOrderintFilterConstants.FORM_BODY_WRAPPER_FILTER_ORDERpreFilter过滤顺序

Policy properties:

Property nameValuesDefault Value说明
limitnumber of calls-单位时间内请求次数限制
quotatime of calls-单位时间内累计请求时间限制(秒),非必要参数
refresh-intervalseconds60单位时间(秒),默认60秒
type[ORIGIN, USER, URL, ROLE][]限流方式:ORIGIN, USER, URL(每个Url 在z秒内访问次数不得超过x次且总计访问时间这不得超过y秒)
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值