springcloud zuul 简介
所属分类 springcloud
浏览量 922
网关
统一入口 请求路由 负载均衡 校验过滤 服务容错 服务聚合
审查与监控
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端口
关于流计算的若干想法