zoukankan      html  css  js  c++  java
  • springcloud中zuul网关服务

    一、配置

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-zuul</artifactId>
    </dependency>

    Zuul可以通过加载动态过滤机制,从而实现以下各项功能:

      1.验证与安全保障: 识别面向各类资源的验证要求并拒绝那些与要求不符的请求。

      2.审查与监控: 在边缘位置追踪有意义数据及统计结果,从而为我们带来准确的生产状态结论。

      3.动态路由: 以动态方式根据需要将请求路由至不同后端集群处。

      4.压力测试: 逐渐增加指向集群的负载流量,从而计算性能水平。

      5.负载分配: 为每一种负载类型分配对应容量,并弃用超出限定值的请求。

      6.静态响应处理: 在边缘位置直接建立部分响应,从而避免其流入内部集群。

      7.多区域弹性: 跨越AWS区域进行请求路由,旨在实现ELB使用多样化并保证边缘位置与使用者尽可能接近。

    二、配置路由规则

    zuul:
      routes:
        # 给服务配置路由
        cloud-feign:
          path: /feign/**

    默认路由规则

    Zuul和Eureka结合使用,可以实现路由的自动配置,自动配置的路由以服务名称为匹配路径,相当于如下配置:

    # 默认路由规则
    zuul:
      routes:
        # 给服务配置路由
        cloud-feign:
          path: /cloud-feign/**

    去掉默认路由规则

    zuul:
      #关闭默认路由配置
      ignored-services: cloud-feign 

    配置访问前缀

    zuul:   
    #不能用/zuul
    prefix: /proxy

    Header过滤及重定向添加Host

    zuul:
       #配置过滤敏感的请求头信息,设置为空就不会过滤
       sensitive-headers: Cookie,Set-Cookie,Authorization
       #设置为true重定向是会添加host请求头
       add-host-header: true

    三、过滤器

    过滤器类型:

    pre:在请求被路由到目标服务前执行,比如权限校验、打印日志等功能;
    routing:在请求被路由到目标服务时执行,这是使用Apache HttpClient或Netflix Ribbon构建和发送原始HTTP请求的地方;
    post:在请求被路由到目标服务后执行,比如给目标服务的响应添加头信息,收集统计数据等功能;
    error:请求在其他阶段发生错误时执行。
    自定义过滤器

    /**
     * @auther: mufeng
     * @Date: 2019/11/26 16:25
     */
    @Slf4j
    public class AccessFilter extends ZuulFilter {
        /**
         * 过滤器类型,有pre、routing、post、error四种。
         * @return
         */
        @Override
        public String filterType() {
            return "pre";
        }
    
        /**
         * 过滤器执行顺序,数值越小优先级越高。
         * @return
         */
        @Override
        public int filterOrder() {
            return 0;
        }
    
        /**
         * 是否进行过滤,返回true会执行过滤。
         * @return
         */
        @Override
        public boolean shouldFilter() {
            return true;
        }
    
        /**
         * 自定义的过滤器逻辑,当shouldFilter()返回true时会执行
         * @return
         * @throws ZuulException
         */
        @Override
        public Object run() throws ZuulException {
    
            RequestContext currentContext = RequestContext.getCurrentContext();
            HttpServletRequest request = currentContext.getRequest();
            log.info("send {} request to {}",request.getMethod(),request.getRequestURL().toString());
            String token = request.getParameter("at");
            if(1==2){
                log.warn("access token is empty");
                currentContext.setSendZuulResponse(false);
                currentContext.setResponseStatusCode(401);
                return null;
            }
            log.info("access token ok");
            return null;
    
        }
    }

    核心过滤器

    过滤器名称  过滤类型  优先级 过滤器的作用
    ServletDetectionFilter  pre  -3 检测当前请求是通过DispatcherServlet处理运行的还是ZuulServlet运行处理的。
    Servlet30WrapperFilter  pre  -2 对原始的HttpServletRequest进行包装。
    FormBodyWrapperFilter  pre  -1 将Content-Type为application/x-www-form-urlencoded或multipart/form-data的请求包装成FormBodyRequestWrapper对象。
    DebugFilter  route  1 根据zuul.debug.request的配置来决定是否打印debug日志。
    PreDecorationFilter  route  5 对当前请求进行预处理以便执行后续操作。
    RibbonRoutingFilter  route  10 通过Ribbon和Hystrix来向服务实例发起请求,并将请求结果进行返回。
    SimpleHostRoutingFilter  route  100 只对请求上下文中有routeHost参数的进行处理,直接使用HttpClient向routeHost对应的物理地址进行转发。
    SendForwardFilter  route  500 只对请求上下文中有forward.to参数的进行处理,进行本地跳转。
    SendErrorFilter  post  0 当其他过滤器内部发生异常时的会由它来进行处理,产生错误响应。
    SendResponseFilter  post  1000 利用请求上下文的响应信息来组织请求成功的响应内容。

    禁用过滤器:

    zuul:
      filterClassName:
         filter:
           disable: true

    禁用PreLogFilter的示例配置

    zuul:
      PreLogFilter:
        pre:
          disable: true 
  • 相关阅读:
    mysql数据库
    Mysql之sql语句操作
    mysql修改root密码的多种方法
    kvm虚拟化
    清华AIOps算法:KPI聚类
    有点扯的预测方法
    内网安全运营的逻辑体系架构
    SpringBoot定时消费Kafka消息
    kafka的consumer消费能力很低的情况下的处理方案
    Kafka_Kafka 消费者 偏移量 与 积压 查询脚本 kafka-consumer-groups.sh
  • 原文地址:https://www.cnblogs.com/mufeng07/p/12876161.html
Copyright © 2011-2022 走看看