zoukankan      html  css  js  c++  java
  • 0606-Zuul构建API Gateway-Zuul过滤器以及禁用Zuul过滤器

    一、概述

      针对Spring Cloud的Zuul配备了许多在代理和服务器模式下默认启用的ZuulFilter bean。

      有关启用的可能过滤器,请参阅zuul过滤器包。 

    二、Zuul过滤器使用

    2.1、传统过滤器:java.servlet.Filter

    package javax.servlet;
    
    import java.io.IOException;
    
    public interface Filter {
    
        public void init(FilterConfig filterConfig) throws ServletException;
    
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException;
    
        public void destroy();
    }

    2.2、ZuulFilter过滤器类型与生命周期

      Zuul大部分功能是同过过滤器实现。有四种:

      1》PRE,在请求被路由之前调用,可利用这种过滤器实现身份认证、在集群中选择请求的微服务、记录调试信息等

      2》ROUTING,这种过滤器将请求路由到微服务。用于构建发送给微服务的请求,并使用apache httpclient或Netfilx Ribbon请求微服务

      3》POST,在路由到微服务以后执行,可用来为响应添加标准的HTTP HEADER、收集统计信息和指标,将响应从微服务发送个客户段等

      4》ERROR,在其他阶段发生错误是、时执行该过滤器

      参看地址:http://techblog.netfilx.com/2013/06/announcing-zuul-edge-service-in-cloud.html

        https://github.com/Netflix/zuul/wiki/how-it-works

    生命周期图

      

     2.3、代码开发

    PreZuulFilter

    package com.lhx.cloud;
    
    import javax.servlet.http.HttpServletRequest;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    
    import com.netflix.zuul.ZuulFilter;
    import com.netflix.zuul.context.RequestContext;
    
    public class PreZuulFilter extends ZuulFilter {
        private static final Logger log = LoggerFactory.getLogger(PreZuulFilter.class);
    
        @Override
        public Object run() {
            // 具体执行
            HttpServletRequest request = RequestContext.getCurrentContext().getRequest();
            String host = request.getRemoteHost();
            PreZuulFilter.log.warn("请求主机:" + host);
            return null;
        }
    
        @Override
        public boolean shouldFilter() {
            // 是否执行次过滤器
            return true;
        }
    
        @Override
        public int filterOrder() {
            // 执行顺序 ,数值越大 越后执行
            return 1;
        }
    
        @Override
        public String filterType() {
            // 执行类型
            return "pre";
        }
    }

    注意要将被类扫描进去

        @Bean
        public PreZuulFilter pre() {
            return new PreZuulFilter();
        }

    2.4、参看代码

    包:spring-cloud-netflix-core-1.4.4.RELEASE.jar下的zuul的filter

    2.5、禁用Zuul的Filter

      禁用过滤器:zuul.<SimpleClassName>.<filterType>.disable=true

      按照惯例,过滤器后面的包是Zuul过滤器类型。示例禁用 org.springframework.cloud.netflix.zuul.filters.post.SendResponseFilter 设置zuul.SendResponseFilter.post.disable=true.

  • 相关阅读:
    Oracle expdp导出多表或表中的部分数据
    sklearn随机森林-分类参数详解
    python中函数 reshape(-1,1)
    Scikit-Learn & TensorFlow机器学习实用指南(二):一个完整的机器学习项目【上】
    查看包内函数:
    盘点 | Python自带的那些数据集
    机器学习之数据预处理
    Python Numpy模块函数np.c_和np.r_
    Pandas dataframe数据写入文件和数据库
    机器学习入门-文本数据-构造Tf-idf词袋模型(词频和逆文档频率) 1.TfidfVectorizer(构造tf-idf词袋模型)
  • 原文地址:https://www.cnblogs.com/bjlhx/p/9069621.html
Copyright © 2011-2022 走看看