SpringCloud GateWay(网关)限流详细介绍

通过官方提供的列子和网上找的资料学习,总结一下springcloud gateway 限流使用的关键点。

官网地址:https://cloud.spring.io/spring-cloud-gateway/spring-cloud-gateway.html

以下主要通过Demo来介绍,如何通过gateway进行限流工作

第一步,简单的搭建一个springcloud注册中心,producer(生产者),gateway(网关)等项目

1、springcloud注册中心 yam配置内容,如下

spring.application.name=spring-cloud-eureka

server.port=8000
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false

eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

2、product(生产者) yam配置内容,如下

spring.application.name=spring-cloud-producer
server.port=9000
eureka.client.serviceUrl.defaultZone=http://localhost:8000/eureka/

提供一个简单的接口,方便网关测试

SpringCloud GateWay(网关)限流详细介绍_第1张图片

3、gateway(网关)yam配置内容,如下

server:
  port: 8888
spring:
  application:
    name: cloud-gateway-eureka
  redis:
    host: localhost
    password:
    port: 6379
  cloud:
    gateway:
     discovery:
        locator:
         enabled: true
     routes:
#     - id: nameRoot
#       uri: lb://spring-cloud-producer
#       predicates:
#       - Path=/name/**
#       filters:
#       - StripPrefix=2
#     - id: add_request_parameter_route
##       uri: http://localhost:9000
#       uri: lb://spring-cloud-producer
#       filters:
#       - AddRequestParameter=foo, bar
#       predicates:
#         - Method=GET
     - id: requestratelimiter_route
       uri: lb://spring-cloud-producer
       filters:
       - name: RequestRateLimiter
         args:
           redis-rate-limiter.replenishRate: 10
           redis-rate-limiter.burstCapacity: 20
           key-resolver: "#{@userKeyResolver}"
       predicates:
         - Method=GET
#     - id: hystrix_route
#       uri: lb://spring-cloud-producer
#       predicates:
#       - Path=/consumingserviceendpoint
#       filters:
#       - name: Hystrix
#         args:
#           name: fallbackcmd
#           fallbackUri: forward:/incaseoffailureusethis
#     - id: retry_test
#       uri: lb://spring-cloud-producer
#       predicates:
#       - Path=/retry
#       filters:
#       - name: Retry
#         args:
#           retries: 3
#           statuses: BAD_GATEWAY
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8000/eureka/
logging:
  level:
    org.springframework.cloud.gateway: debug

这块把其它暂时没有的注释了,只留限流的功能配置

  • filter名称必须是RequestRateLimiter
  • redis-rate-limiter.replenishRate:允许用户每秒处理多少个请求
  • redis-rate-limiter.burstCapacity:令牌桶的容量,允许在一秒钟内完成的最大请求数
  • key-resolver:使用SpEL按名称引用bean
userKeyResolver限流方法的实现,如下

SpringCloud GateWay(网关)限流详细介绍_第2张图片

 

第二步 验证操作

以此启动注册中心,网关,生产者,在浏览器上输入:http://localhost:8888/hello?user=zhangsan

SpringCloud GateWay(网关)限流详细介绍_第3张图片

打开redis cli客户端,输入 keys * 如下

根据请求上的参数来对请求进行限流。比如有一个请求是http://localhost:8888/hello?user=zhangsan,对相同的name值进行限流。我们设置了1分钟内,限流10次,那么如果1分钟内,name是zhangsan的请求超过10次,就会发生限流。

SpringCloud GateWay(网关)限流详细介绍_第4张图片

到这就完成springcloud 限流的测试和运用了。简单了些,希望能帮助到你。哈哈

git上提供练习的Demo,可以参考

https://github.com/Joe192168/springcloud-demo

你可能感兴趣的:(Spring,Cloud)