首页  

springcloud zuul 简介     所属分类 springcloud 浏览量 72
网关
统一入口 请求路由 负载均衡 校验过滤 服务容错 服务聚合
审查与监控
A/B test 灰度发布

过滤器机制
一系列 filters, 类似 Servlet Filter 或 AOP
groovy 实现 过滤器 动态的加载 编译 运行 , 定期扫描特定的目录
RequestContext ThreadLocal

四种过滤器类型

PRE        身份验证 记录调试信息等
ROUTING    使用 ApacheHttpClient 或  Ribbon 请求微服务
POST       修改响应信息 修改Header 收集统计信息和指标 等
ERROR   

内置的特殊过滤器
StaticResponseFilter   自身直接生成响应
SurgicalDebugFilter    将特定请求路由到特定节点

ZuulServlet
类似SpringMVC的DispatcherServlet
三个核心方法   preRoute()  route() postRoute()

ZuulRunner  
FilterProcessor  依据filterType执行 filter 处理逻辑

根据Type获取 filter list
遍历该list,执行每个filter的处理逻辑,processZuulFilter(ZuulFilter filter)
RequestContext对每个filter的执行状况进行记录,要包括执行时间、执行成功或者失败,如果执行失败则封装异常后抛出

@EnableZuulProxy 启用Zuul API网关功能

/actuator/routes            
查看简单路由信息

/actuator/routes/details    
查看详细路由信息


PreLogFilter 继承 ZuulFilter

@Component
public class PreLogFilter extends ZuulFilter {
    private Logger LOGGER = LoggerFactory.getLogger(this.getClass());
    // 类型 pre routing post error
    @Override
    public String filterType() {
        return "pre";
    }

    // 执行顺序,越小优先级越高
    @Override
    public int filterOrder() {
        return 1;
    }

    // 是否进行过滤,true 执行过滤
    @Override
    public boolean shouldFilter() {
        return true;
    }

    // 过滤器逻辑,shouldFilter()返回true时执行
    @Override
    public Object run() throws ZuulException {
        RequestContext requestContext = RequestContext.getCurrentContext();
        HttpServletRequest request = requestContext.getRequest();
        String host = request.getRemoteHost();
        String method = request.getMethod();
        String uri = request.getRequestURI();
        LOGGER.info("Remote host:{},method:{},uri:{}", host, method, uri);
        return null;
    }
}


springboot2网关zuul实例

上一篇     下一篇
SpringMVC @ControllerAdvice 注解

springboot读取配置的几种方式

feign ribbon 独立使用例子

SpringBoot注册Servlet的三种方式

springboot获取内置tomcat端口

关于流计算的若干想法