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 请求地址;
正常访问
正常访问超出次数访问
超出次数
网友评论