SpringCloud(五)Zuul网关
目录
一.Zuul网关综合使用
1.Zuul网关特点
2.Zuul路由
3.Zuul过滤器
4.Zuul限流
5.Zuul路由列表和过滤器列表
一.Zuul网关综合使用
1.Zuul网关特点
- zuul主要由两部分组成:路由和过滤器
- zuul的核心是一系列过滤器
2.Zuul路由
首先在pom.xml中导入zuul配置
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
在启动类上加入注解@EnableZuulProxy,再将zuul项目注册到eureka中去。
zuul会默认配置一个以其他微服务的server_id为转发的路由。
#系统默认配置
zuul.routes.feign-customer=/feign-customer/**
所以这时候可以直接通过zuul来访问customer微服务
http://localhost\_zuul:port\_zuul/feign-customer/hi?name=123
会转发为http://locahost\_customer:port\_zuul/hi?name=123
当然,你也可以自定义转发路由
#自定义转发规则
zuul.routes.feign-customer=/service-customer/**
#忽略某种规则的路由请求方式
zuul.ignored-patterns=/feign-customer/**
3.Zuul过滤器
- PRE:前置过滤器:限流,鉴权,参数校验,请求转发
- POST:后置过滤器:统计,日志
- ROUTE:路由过滤器
- Error:错误过滤器
前置过滤器,忽略掉没有token的请求
@Component
public class CloudFilter extends ZuulFilter {
@Override
public String filterType() {
return PRE_TYPE;
}
@Override
public int filterOrder() {
return PRE_DECORATION_FILTER_ORDER-1;
}
/**
*校验判断
* @return true 进入run方法,false不进入run方法
*/
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run(){
RequestContext requestContext = RequestContext.getCurrentContext();
HttpServletRequest httpServletRequest = requestContext.getRequest();
if(StringUtils.isEmpty(httpServletRequest.getParameter("token"))) {
requestContext.setSendZuulResponse(false);
requestContext.setResponseStatusCode(HttpStatus.SC_UNAUTHORIZED);
}
return null;
}
}
4.Zuul限流
对一些请求进行限流设置,应该在前置过滤器中最先进行。
令牌桶限流法:一定速率往桶中添加令牌,当令牌满来就会丢弃掉。当请求进来的时候,先获取令牌,获取到令牌的请求可以正常请求,无令牌的请求会被拒绝掉。
限流过滤器
@Component
public class RateLimitFilter extends ZuulFilter {
//com.google.common.util.concurrent.RateLimiter谷歌的令牌算法
private static final RateLimiter RATE_LIMITER = RateLimiter.create(100);//每秒100个令牌
@Override
public String filterType() {
return PRE_TYPE;
}
@Override
public int filterOrder() {
return -1000;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() {
if(!RATE_LIMITER.tryAcquire()){
//没有获取令牌权限
throw new RuntimeException();
}
return null;
}
}
5.Zuul路由列表和过滤器列表
如果想要查看zuul的过滤器列表和路由列表,首先需要开放请求配置
#启动路由和过滤器查看
management.endpoints.web.exposure.include=routes,filters
访问http://localhost:8059/actuator/filters接口查看过滤器
访问http://localhost:8059/actuator/routes查看路由列表
还没有评论,来说两句吧...