springboot 项目中 zuul 的使用,限流

springboot 项目中 zuul 的使用,限流
(1)
package com.hikvision.platform;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;

@EnableZuulProxy
@SpringBootApplication
public class PlatformZuulApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication application = new SpringApplication(PlatformZuulApplication.class);
application.run(args);
}

@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    return builder.sources(PlatformZuulApplication.class);
}

}

(2)
package com.hikvision.platform.config;

import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.RateLimitKeyGenerator;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.RateLimitUtils;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.config.properties.RateLimitProperties;
import com.marcosbarbero.cloud.autoconfigure.zuul.ratelimit.support.DefaultRateLimitKeyGenerator;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.netflix.zuul.filters.Route;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.http.HttpServletRequest;

/**

  • 自定义zuul换成key

  • @author

  • @date created in 2020/5/11 16:15

  • @since
    */
    @Configuration
    @ConditionalOnProperty(name = “zuul.ratelimit.enabled”, havingValue = “true”)
    public class DefineRateLimitKeyGenerator {

    @Value("${zuul.routes.resource.service-id}")
    private String resourceServiceId;

    @Bean
    public RateLimitKeyGenerator ratelimitKeyGenerator(RateLimitProperties properties, RateLimitUtils rateLimitUtils) {
    return new DefaultRateLimitKeyGenerator(properties, rateLimitUtils) {
    @Override
    public String key(HttpServletRequest request, Route route, RateLimitProperties.Policy policy) {
    String routeId = route.getId();
    if (resourceServiceId.equals(routeId)) {
    String authorization = request.getHeader(“Authorization”);
    if (StringUtils.isNotBlank(authorization)) {
    return super.key(request, route, policy) + “:” + authorization.split("😊[0];
    }
    }
    return super.key(request, route, policy);
    }
    };
    }
    }

(3)配置
#context
server.port=9250
spring.application.name=zuul-server
#redis相关配置
spring.redis.host=10.19.180.198
spring.redis.port=6379
spring.redis.database=0
spring.redis.password=
spring.redis.timeout=3000
spring.redis.jedis.pool.min-idle=0
spring.redis.jedis.pool.max-idle=10
spring.redis.jedis.pool.max-active=10
spring.redis.jedis.pool.max-wait=3000
#zuul相关配置
#zuul.sensitiveHeaders设置为空,代表不过滤任何Header信息,Header会向下转发
zuul.sensitive-headers=
#数据开放服务路由配置
zuul.routes.resource.service-id=resource
#忽略掉路由前缀
zuul.routes.resource.strip-prefix=false
#路由的请求路径
zuul.routes.resource.path=/platform/resource/**
#路由的地址
zuul.routes.resource.url=http://127.0.0.1:9258
#zuul限流相关配置
zuul.ratelimit.enabled=true
#不添加限流信息请求头
zuul.ratelimit.add-response-headers=false
#对应存储类型(用来存储统计信息)
zuul.ratelimit.repository=REDIS
#代理之后
zuul.ratelimit.behind-proxy=true
#默认限流策略
#可选 - 每个刷新时间窗口对应的请求数量限制
zuul.ratelimit.default-policy-list[0].limit=10000
#可选 - 每个刷新时间窗口对应的请求时间限制(秒)
#zuul.ratelimit.default-policy-list[0].quota=10
#刷新时间窗口的时间,默认值 (秒)
zuul.ratelimit.default-policy-list[0].refresh-interval=60
#限流方式 - 请求源头地址
zuul.ratelimit.default-policy-list[0].type[0]=origin
#限流方式 - 请求uri
zuul.ratelimit.default-policy-list[0].type[1]=url

#数据开放服务限流策略
#可选 - 每个刷新时间窗口对应的请求数量限制
zuul.ratelimit.policy-list.resource[0].limit=10000
#可选 - 每个刷新时间窗口对应的请求时间限制(秒)
#zuul.ratelimit.policy-list.resource[0].quota=1
#刷新窗口的时间,默认值(秒)
zuul.ratelimit.policy-list.resource[0].refresh-interval=60

(4)依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-redis</artifactId>
    </dependency>
    <!-- zuul依赖 -->
    <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.2.6.RELEASE</version>
    </dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值