GateWay网关使用API进行路由转发和限流

@Configuration
public class GateWayConfig {

    /**
     * 根据URL进行接口限流
     */
    @Bean
    public KeyResolver ipKeyResolver() {
        return exchange -> Mono.just(exchange.getRequest().getPath().value());
    }


    @Bean
    public RedisRateLimiter redisRateLimiter() {
    	//设置令牌桶每秒填充平均速率、令牌桶的最大容量
        return new RedisRateLimiter(10, 100);
    }

    @Bean
    public RouteLocator routes(RouteLocatorBuilder builder) {
        return builder.routes()
                //redirect_route是路由ID,保持唯一即可;拦截以/test/**开头的所有请求
                .route("redirect_route", r -> r.path("/test/**")
                        .filters(
                                f -> f.requestRateLimiter(config -> {
                                    //配置限流器
                                    config.setRateLimiter(redisRateLimiter());
                                    //配置限流规则
                                    config.setKeyResolver(ipKeyResolver());
                                })
                                        //重写路径,把test替换成service
                                        .rewritePath("/test/(?<segment>.*)", "/service/$\\{segment}")
                                        .modifyResponseBody(String.class, String.class,
                                                (exchange, s) -> {
                                                    //TODO: 此处可以获取返回体的所有信息
                                                    System.out.println(s);
                                                    return Mono.just(s);
                                                })

                        )
                        //转发路径(lb表示从注册中心根据服务名获取服务路径转发,也可以直接配置IP和端口)
                        .uri("lb://service-produce"))
                .build();
    }


版权声明:本文为u013998466原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。