zuul 的功能
- 身份认证和安全:识别资源的验证要求,并拒绝不符合要求的请求。
- 审查和监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确地生产视图。
- 动态路由:动态的将请求路由转发到不同的后端集群。
- 压力测试:逐渐增加指向集群的流量,以了解性能。(通过审查和监控来增加流量)
- 负载分配:为每种负载类型分配对应的容量,并弃用超出限定值的请求。
- 静态响应处理:在边缘位置直接建立部分响应,从而避免其转发到内部集群。
- 多区域弹性:跨域AWS Regoin 进行请求路由,旨在实现ELB(Elastic Load Balancing)使用多样化以及让系统边缘更加贴近系统的使用者。
zuul 的使用
pom 引用jar包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
在application 主方法上加上注解 @EnableZuulProxy
使用 @EnableZuulProxy ,因为使用 @EnableZuulServer 功能单一,很多过滤器不能生效。
实现功能
1.身份认证和安全
配置过滤器
@Component
public class LoginFilter extends ZuulFilter
{
@Override
public String filterType(){
return FilterConstants.PRE_TYPE;
}
@Override
public int filterOrder() {
return FilterConstants.PRE_DECORATION_FILTER_ORDER;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() throws ZuulException
{
//获取request 请求
RequestContext currentContext = RequestContext.getCurrentContext();
HttpServletRequest request = currentContext.getRequest();
//获取token
String accessToken = request.getParameter("access_token");
//判断token
if (StringUtils.isBlank(accessToken)){
currentContext.setSendZuulResponse(false);
currentContext.setResponseStatusCode(HttpStatus.UNAUTHORIZED.value());
}
return null;
}
}
2.动态路由
zuul:
routes:
mircoservice-user:
#拦截所有路径为user的请求
path: /user/**
#指向serviceId
serviceId: mircoservice-user
#是否去除user 前缀,默认是true,则请求路径要多加上 /user/
stripPrefix: false
3.静态响应处理
#只能内部访问的serviceId
zuul:
ignored-services:
- mircoservice-user
- mircoservice-consume