@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();
}
GateWay网关使用API进行路由转发和限流
最新推荐文章于 2024-05-20 11:02:57 发布