1.添加pom包
<dependency>
<groupId>com.marcosbarbero.cloud</groupId>
<artifactId>spring-cloud-zuul-ratelimit</artifactId>
<version>2.0.6.RELEASE</version>
</dependency>
2.启动类
@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public class ZuulServerApplication {
public static void main(String[] args) {
SpringApplication.run(ZuulServerApplication.class, args);
}
}
3.yml配置
##############################
# 网关配置
#############################
server:
port: 8080
spring:
application:
name: cmtt-gateway
desc: 系统中心配置
feign:
hystrix:
enabled: true
#feginClient 熔断超时配置
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 60000
#ribbon超时和重试配置【重试次数=MaxAutoRetries + MaxAutoRetriesNextServer + (MaxAutoRetries * MaxAutoRetriesNextServer)】
# 熔断时间与ribbon超时关系:
# 重试时间 =(MaxAutoRetries+MaxAutoRetriesNextServer+MaxAutoRetriesNextServer*MaxAutoRetries)*ReadTimeout+网络响应时间
# 重试时间 <timeoutInMilliseconds
ribbon:
OkToRetryOnAllOperations: false #是否对所有请求进行重试
MaxAutoRetries: 0 #对当前实例的重试次数,默认0
MaxAutoRetriesNextServer: 0 #对切换实例的重试次数,默认1
ReadTimeout: 60000 #负载均衡超时时间,默认值5000
ConnectTimeout: 60000 #ribbon请求连接的超时时间,默认值2000
zuul:
host:
socket-timeout-millis: 88000
connect-timeout-millis: 88000
routes:
auth:
path: /biz/sys/**
serviceId: cmtt-biz-sys
sensitive-headers: Access-Control-Allow-Origin
ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Access-Token,APPToken
pmis:
path: /biz/pmis/**
serviceId: cmtt-biz-project
sensitive-headers: Access-Control-Allow-Origin
ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Access-Token,APPToken
fms:
path: /biz/fms/**
serviceId: cmtt-biz-fms
ratelimit:
key-prefix: springcloud-book #按粒度拆分的临时变量key前缀
enabled: true #启用开关
repository: IN_MEMORY #key存储类型,默认是IN_MEMORY本地内存,此外还有多种形式
behind-proxy: true #表示代理之后
default-policy: #全局限流策略,可单独细化到服务粒度
limit: 2 #在一个单位时间窗口的请求数量
quota: 1 #在一个单位时间窗口的请求时间限制
refresh-interval: 3 #单位时间窗口
type:
- user #可指定用户粒度
- origin #可指定客户端地址粒度
- url #可指定url粒度
全局开启了限流,策略是,3秒内访问不允许超过 2 次,并且这 2 次请求要小于 1 秒。
下面是针对某个服务
##############################
# 网关配置
#############################
server:
port: 8080
spring:
application:
name: cmtt-gateway
desc: 系统中心配置
feign:
hystrix:
enabled: true
#feginClient 熔断超时配置
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 60000
#ribbon超时和重试配置【重试次数=MaxAutoRetries + MaxAutoRetriesNextServer + (MaxAutoRetries * MaxAutoRetriesNextServer)】
# 熔断时间与ribbon超时关系:
# 重试时间 =(MaxAutoRetries+MaxAutoRetriesNextServer+MaxAutoRetriesNextServer*MaxAutoRetries)*ReadTimeout+网络响应时间
# 重试时间 <timeoutInMilliseconds
ribbon:
OkToRetryOnAllOperations: false #是否对所有请求进行重试
MaxAutoRetries: 0 #对当前实例的重试次数,默认0
MaxAutoRetriesNextServer: 0 #对切换实例的重试次数,默认1
ReadTimeout: 60000 #负载均衡超时时间,默认值5000
ConnectTimeout: 60000 #ribbon请求连接的超时时间,默认值2000
zuul:
host:
socket-timeout-millis: 88000
connect-timeout-millis: 88000
routes:
auth:
path: /biz/sys/**
serviceId: cmtt-biz-sys
sensitive-headers: Access-Control-Allow-Origin
ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Access-Token,APPToken
pmis:
path: /biz/pmis/**
serviceId: cmtt-biz-project
sensitive-headers: Access-Control-Allow-Origin
ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Access-Token,APPToken
fms:
path: /biz/fms/**
serviceId: cmtt-biz-fms
ratelimit:
key-prefix: springcloud-book #按粒度拆分的临时变量key前缀
enabled: true #启用开关
repository: IN_MEMORY #key存储类型,默认是IN_MEMORY本地内存,此外还有多种形式
behind-proxy: true #表示代理之后
default-policy: #全局限流策略,可单独细化到服务粒度
limit: 2 #在一个单位时间窗口的请求数量
quota: 1 #在一个单位时间窗口的请求时间限制
refresh-interval: 3 #单位时间窗口
type:
- user #可指定用户粒度
- origin #可指定客户端地址粒度
- url #可指定url粒度
policies:
cmtt-biz-sys:
limit: 5
quota: 5
efresh-interval: 10
policies 配置,含义是我们对 client-a 服务进行特殊限流配置,10秒内请求数量不得大于 5 次,这 5 次请求总时长不能大于 5秒,其他服务对限流策略还是按照 上面默认的,不冲突
最后启动测试,10秒内访问第六次就报错